diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/core/c++/iterator.hpp | 28 | ||||
| -rw-r--r-- | lib/core/c++/particle/particle.hpp | 7 | ||||
| -rw-r--r-- | lib/core/tests/iterator.cpp | 17 |
3 files changed, 52 insertions, 0 deletions
diff --git a/lib/core/c++/iterator.hpp b/lib/core/c++/iterator.hpp index 866543a..696c521 100644 --- a/lib/core/c++/iterator.hpp +++ b/lib/core/c++/iterator.hpp @@ -50,6 +50,34 @@ public: } }; +template<typename... Tup> +struct ct_tuple_iterator final { +private: + template<typename Func, uint64_t i> + static constexpr saw::error_or<void> apply_i( + Func& func, + saw::data<sch::Tuple<Tup...>>& tup + ){ + if constexpr ( i < sizeof...(Tup) ){ + auto eov = func(tup.template get<i>()); + if(eov.is_error()){ + return eov; + } + return apply_i<Func,i+1u>(func,tup); + } + + return saw::make_void(); + } +public: + template<typename Func> + static constexpr saw::error_or<void> apply( + Func&& func, + saw::data<sch::Tuple<Tup...>>& tup + ){ + return apply_i<Func,0u>(func,tup); + } +}; + /* Ambiguous template<typename Func> void iterate_over(Func&& func, const saw::data<sch::FixedArray<sch::UInt64,3u>>& start, const saw::data<sch::FixedArray<sch::UInt64,3u>>& end, const saw::data<sch::FixedArray<sch::UInt64,3u>>& dist = {{{0u,0u,0u}}}){ diff --git a/lib/core/c++/particle/particle.hpp b/lib/core/c++/particle/particle.hpp index 7af43dc..01429b2 100644 --- a/lib/core/c++/particle/particle.hpp +++ b/lib/core/c++/particle/particle.hpp @@ -238,5 +238,12 @@ constexpr auto broadphase_collision_check = []( ) -> bool{ return broadphase_collision_distance_squared<T,D,Collision>(left,coll_l,right,coll_r).first; }; + + + +namespace impl { + +} + } } diff --git a/lib/core/tests/iterator.cpp b/lib/core/tests/iterator.cpp index 261765a..919c12c 100644 --- a/lib/core/tests/iterator.cpp +++ b/lib/core/tests/iterator.cpp @@ -20,6 +20,23 @@ SAW_TEST("Old Iterate"){ }, start, end); } +SAW_TEST("CT Tuple Iterator"){ + using namespace kel; + + saw::data< + sch::Tuple< + sch::Float32, + sch::Int16, + sch::Float64, + sch::UInt32 + > + > tup; + + lbm::ct_tuple_iterator<std::decay_t<decltype(tup)>::Schema>::apply([](auto& val) -> saw::error_or<void> { + return saw::make_void(); + },tup); +} + SAW_TEST("Old Iterate with Distance 1"){ using namespace kel; |
