Skip to content

Commit

Permalink
Squashed commit of the following:
Browse files Browse the repository at this point in the history
commit 65ff28a
Author: Abdo Eid <abdoeid.eg@ieee.org>
Date:   Sat May 4 04:34:08 2024 +0300

    raised the iterator over the StdDeque

commit f0c3f23
Author: Abdo Eid <abdoeid.eg@ieee.org>
Date:   Sat Apr 20 18:35:59 2024 +0200

    changed the way of template interfacing of the iterator so it is OK with MacOS clang

commit b7d5e77
Author: Abdo Eid <abdoeid.eg@ieee.org>
Date:   Sat Apr 20 13:04:04 2024 +0200

    fixed an error happend when rebasing

commit 94ebeae
Author: Abdo Eid <abdoeid.eg@ieee.org>
Date:   Sat Sep 23 20:13:56 2023 +0300

    reset my OS platform custom findJulia file

commit 18af8f3
Author: Abdo Eid <abdoeid.eg@ieee.org>
Date:   Sat Sep 23 19:04:26 2023 +0300

    DequeIterator working now

commit 3a3d381
Author: Abdo Eid <abdoeid.eg@ieee.org>
Date:   Sat Sep 23 05:33:06 2023 +0300

    tmp

commit 90b2738
Author: Abdo Eid <abdoeid.eg@ieee.org>
Date:   Mon May 1 20:10:47 2023 +0200

    Deque Iterator testing

commit 5e6362f
Author: Abdo Eid <abdoeid.eg@ieee.org>
Date:   Thu Mar 30 09:50:28 2023 +0200

     Add basic support for the iterator and specialize an instance of it for deque

commit 6110368
Author: Abdo Eid <abdoeid.eg@ieee.org>
Date:   Mon Mar 20 08:29:45 2023 +0200

    removed the constructor that takes an std::allocator and some includes that I have added randomly before

commit 96272e7
Author: Abdo Eid <abdoeid.eg@ieee.org>
Date:   Sat Mar 18 16:37:25 2023 +0200

    Add basic support for std::deque
  • Loading branch information
barche committed Jul 21, 2024
1 parent 844c505 commit 5de1192
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 35 deletions.
68 changes: 34 additions & 34 deletions include/jlcxx/stl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,40 +131,6 @@ void wrap_range_based_algorithms([[maybe_unused]] TypeWrapperT& wrapped)
#endif
}

template <typename valueT, template <typename, typename=std::allocator<valueT>> typename ContainerT>
struct IteratorWrapper
{
using value_type = valueT;
using iterator_type = typename ContainerT<value_type>::iterator;

iterator_type value;
};


template <typename T>
void validate_iterator(T it)
{
using IteratorT = typename T::iterator_type;
if (it.value == IteratorT())
{
throw std::runtime_error("Invalid iterator");
}
}

struct WrapIterator
{
template <typename TypeWrapperT>
void operator()(TypeWrapperT&& wrapped)
{
using WrappedT = typename TypeWrapperT::type;
using ValueT = typename WrappedT::value_type;

wrapped.method("iterator_next", [](WrappedT it) -> WrappedT { ++(it.value); return it; });
wrapped.method("iterator_value", [](WrappedT it) -> ValueT { validate_iterator(it); return *it.value; });
wrapped.method("iterator_is_equal", [](WrappedT it1, WrappedT it2) -> bool {return it1.value == it2.value; });
};
};

template<typename T>
struct WrapVectorImpl
{
Expand Down Expand Up @@ -245,6 +211,40 @@ struct WrapValArray
}
};


template <typename valueT, template <typename, typename=std::allocator<valueT>> typename ContainerT>
struct IteratorWrapper
{
using value_type = valueT;
using iterator_type = typename ContainerT<value_type>::iterator;

iterator_type value;
};

template <typename T>
void validate_iterator(T it)
{
using IteratorT = typename T::iterator_type;
if (it.value == IteratorT())
{
throw std::runtime_error("Invalid iterator");
}
}

struct WrapIterator
{
template <typename TypeWrapperT>
void operator()(TypeWrapperT&& wrapped)
{
using WrappedT = typename TypeWrapperT::type;
using ValueT = typename WrappedT::value_type;

wrapped.method("iterator_next", [](WrappedT it) -> WrappedT { ++(it.value); return it; });
wrapped.method("iterator_value", [](WrappedT it) -> ValueT { validate_iterator(it); return *it.value; });
wrapped.method("iterator_is_equal", [](WrappedT it1, WrappedT it2) -> bool {return it1.value == it2.value; });
};
};

template <typename valueT>
struct DequeIteratorWrapper : IteratorWrapper<valueT, std::deque> {};

Expand Down
2 changes: 1 addition & 1 deletion src/stl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ JLCXX_MODULE define_cxxwrap_stl_module(jlcxx::Module& stl)
.method("swap", &std::thread::swap);

stl.method("hardware_concurrency", [] () { return std::thread::hardware_concurrency(); });

jlcxx::add_smart_pointer<std::shared_ptr>(stl, "SharedPtr");
jlcxx::add_smart_pointer<std::weak_ptr>(stl, "WeakPtr");
jlcxx::add_smart_pointer<std::unique_ptr>(stl, "UniquePtr");
Expand Down

0 comments on commit 5de1192

Please sign in to comment.