Skip to content

Commit

Permalink
raised the iterator over the StdDeque
Browse files Browse the repository at this point in the history
  • Loading branch information
abdoei committed May 4, 2024
1 parent f0c3f23 commit 65ff28a
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 14 deletions.
21 changes: 11 additions & 10 deletions include/jlcxx/stl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,12 @@ class JLCXX_API StlWrappers
static std::unique_ptr<StlWrappers> m_instance;
Module& m_stl_mod;
public:
// TypeWrapper<Parametric<TypeVar<1>, TypeVar<2>>> iterator;
TypeWrapper1 vector;
TypeWrapper1 valarray;
TypeWrapper1 dequeIterator;
TypeWrapper1 deque;
TypeWrapper1 queue;
TypeWrapper1 dequeIterator;

static void instantiate(Module& mod);
static StlWrappers& instance();
Expand Down Expand Up @@ -195,10 +196,10 @@ struct WrapIterator
{
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; });
wrapped.module().unset_override_module();
};
};

Expand All @@ -223,8 +224,8 @@ struct WrapDeque
wrapped.method("pop_front", [] (WrappedT& v) { v.pop_front(); });
wrapped.method("isEmpty", &WrappedT::empty);
wrapped.method("clear", &WrappedT::clear);
wrapped.method("iteratorbegin", [] (WrappedT& v) { return stl::DequeIteratorWrapper<T>{v.begin()}; });
wrapped.method("iteratorend", [] (WrappedT& v) { return stl::DequeIteratorWrapper<T>{v.end() }; });
wrapped.method("iteratorbegin", [] (WrappedT& v) { return DequeIteratorWrapper<T>{v.begin()}; });
wrapped.method("iteratorend", [] (WrappedT& v) { return DequeIteratorWrapper<T>{v.end() }; });
wrapped.module().unset_override_module();
}
};
Expand All @@ -239,9 +240,9 @@ struct WrapQueueImpl

wrapped.module().set_override_module(StlWrappers::instance().module());
wrapped.method("cppsize", &WrappedT::size);
wrapped.method("push_back!", [] (WrappedT& v, const T& val) { v.push(val); });
wrapped.method("push_back", [] (WrappedT& v, const T& val) { v.push(val); });
wrapped.method("front", [] (WrappedT& v) { return v.front(); });
wrapped.method("pop_front!", [] (WrappedT& v) { v.pop(); });
wrapped.method("pop_front", [] (WrappedT& v) { v.pop(); });
wrapped.module().unset_override_module();
}
};
Expand All @@ -256,9 +257,9 @@ struct WrapQueueImpl<bool>

wrapped.module().set_override_module(StlWrappers::instance().module());
wrapped.method("cppsize", &WrappedT::size);
wrapped.method("push_back!", [] (WrappedT& v, const bool val) { v.push(val); });
wrapped.method("push_back", [] (WrappedT& v, const bool val) { v.push(val); });
wrapped.method("front", [] (WrappedT& v) -> bool { return v.front(); });
wrapped.method("pop_front!", [] (WrappedT& v) { v.pop(); });
wrapped.method("pop_front", [] (WrappedT& v) { v.pop(); });
wrapped.module().unset_override_module();
}
};
Expand All @@ -279,10 +280,10 @@ inline void apply_stl(jlcxx::Module& mod)
{
TypeWrapper1(mod, StlWrappers::instance().vector).apply<std::vector<T>>(WrapVector());
TypeWrapper1(mod, StlWrappers::instance().valarray).apply<std::valarray<T>>(WrapValArray());
// TypeWrapper(mod, StlWrappers::instance().iterator).apply<stl::IteratorWrapper<T, >>(WrapIterator());
TypeWrapper1(mod, StlWrappers::instance().dequeIterator).apply<stl::DequeIteratorWrapper<T>>(WrapIterator());
TypeWrapper1(mod, StlWrappers::instance().deque).apply<std::deque<T>>(WrapDeque());
TypeWrapper1(mod, StlWrappers::instance().queue).apply<std::queue<T>>(WrapQueue());
TypeWrapper1(mod, StlWrappers::instance().dequeIterator).apply<stl::DequeIteratorWrapper<T>>(WrapIterator());
// TypeWrapper1(mod, StlWrappers::instance().iterator).apply<stl::VectorIteratorWrapper<T>>(WrapIterator());
}

}
Expand Down
8 changes: 4 additions & 4 deletions src/stl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ JLCXX_API void StlWrappers::instantiate(Module& mod)
m_instance.reset(new StlWrappers(mod));
m_instance->vector.apply_combination<std::vector, stltypes>(stl::WrapVector());
m_instance->valarray.apply_combination<std::valarray, stltypes>(stl::WrapValArray());
m_instance->deque.apply_combination<std::deque, stltypes>(stl::WrapDeque());
m_instance->queue.apply_combination<std::queue, stltypes>(stl::WrapQueue());
m_instance->dequeIterator.apply_combination<stl::DequeIteratorWrapper, stltypes>(stl::WrapIterator());
m_instance->deque.apply_combination<std::deque, stltypes>(stl::WrapDeque());
m_instance->queue.apply_combination<std::queue, stltypes>(stl::WrapQueue());
smartptr::apply_smart_combination<std::shared_ptr, stltypes>();
smartptr::apply_smart_combination<std::weak_ptr, stltypes>();
smartptr::apply_smart_combination<std::unique_ptr, stltypes>();
Expand All @@ -45,9 +45,9 @@ JLCXX_API StlWrappers::StlWrappers(Module& stl) :
m_stl_mod(stl),
vector(stl.add_type<Parametric<TypeVar<1>>>("StdVector", julia_type("AbstractVector"))),
valarray(stl.add_type<Parametric<TypeVar<1>>>("StdValArray", julia_type("AbstractVector"))),
dequeIterator(stl.add_type<Parametric<TypeVar<1>>>("StdDequeIterator")),
deque(stl.add_type<Parametric<TypeVar<1>>>("StdDeque", julia_type("AbstractVector"))),
queue(stl.add_type<Parametric<TypeVar<1>>>("StdQueue", julia_type("AbstractVector"))),
dequeIterator(stl.add_type<Parametric<TypeVar<1>>>("StdIterator"))
queue(stl.add_type<Parametric<TypeVar<1>>>("StdQueue", julia_type("AbstractVector")))
{
}

Expand Down

0 comments on commit 65ff28a

Please sign in to comment.