summaryrefslogtreecommitdiff
path: root/lib/core
diff options
context:
space:
mode:
Diffstat (limited to 'lib/core')
-rw-r--r--lib/core/c++/iterator.hpp28
-rw-r--r--lib/core/c++/particle/particle.hpp7
-rw-r--r--lib/core/tests/iterator.cpp17
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;