diff options
| -rw-r--r-- | lib/core/c++/chunk.hpp | 20 | ||||
| -rw-r--r-- | lib/sycl/c++/data.hpp | 2 |
2 files changed, 14 insertions, 8 deletions
diff --git a/lib/core/c++/chunk.hpp b/lib/core/c++/chunk.hpp index 38b567b..223ceec 100644 --- a/lib/core/c++/chunk.hpp +++ b/lib/core/c++/chunk.hpp @@ -6,23 +6,29 @@ namespace kel { namespace lbm { namespace sch { namespace impl { -template<typename Sch, uint64_t Dim, uint64_t Side, typename... AddedSides> +template<typename Sch, uint64_t Ghost, typename LeftG, typename RightG> struct chunk_schema_type_helper { - using Schema = typename chunk_schema_type_helper<Sch,Dim-1u,Side,AddedSides...,Side>::Schema; + using Schema = typename chunk_schema_type_helper<Sch,Ghost,LeftG,RightG>::Schema; }; -template<typename Sch, uint64_t Side, typename... AddedSides> -struct chunk_schema_type_helper<Sch, 0u, Side, AddedSides...> { +template<typename Sch, uint64_t Ghost, typename Side0, typename... Sides, typename... AddedSides> +struct chunk_schema_type_helper<Sch, Ghost, saw::tmpl_group<Side0,Sides...>, saw::tmpl_group<AddedSides...>> final { + using Schema = FixedArray<Sch,AddedSides...>; +}; + +template<typename Sch, uint64_t Ghost, uint64_t... AddedSides> +struct chunk_schema_type_helper<Sch, Ghost, saw::tmpl_group<Side0,Sides...>, saw::tmpl_group<AddedSides...>> final { using Schema = FixedArray<Sch,AddedSides...>; }; } -template<typename Schema, uint64_t Dim, uint64_t Side, uint64_t Ghost = 0u> +template<typename Schema, uint64_t Ghost, uint64_t... Side> struct Chunk { - using InnerSchema = typename impl::chunk_schema_type_helper<Sch, Dim, Side + (2u*Ghost)>::Schema; + using InnerSchema = typename impl::chunk_schema_type_helper<Sch, Ghost, Side...>::Schema; }; +// Not needed for now template<typename ChunkSchema, uint64_t Dim> using SuperChunk = Array<ChunkSchema,Dim>; } @@ -35,7 +41,7 @@ class data<kel::lbm::sch::Chunk<Sch,Dim,Side,Ghost>,Encode> final { public: using Schema = kel::lbm::sch::Chunk<Sch,Dim,Side,Ghost>; private: - data<Schema::InnerSchema, Encode> + data<typename Schema::InnerSchema, Encode> values_; public: }; } diff --git a/lib/sycl/c++/data.hpp b/lib/sycl/c++/data.hpp index 53a35bc..bba52d6 100644 --- a/lib/sycl/c++/data.hpp +++ b/lib/sycl/c++/data.hpp @@ -19,7 +19,7 @@ struct struct_has_only_equal_dimension_array{}; namespace saw { template<uint64_t... Meta, typename... Sch, string_literal... Keys, typename Encode> -class data<schema::Struct<schema::Member<schema::FixedArray<Sch,Meta...>, Keys>...>, kel::lbm::encode::Sycl<Encode>> final { +class data<schema::Struct<schema::Member<schema::Chunk<Sch,Ghost,Meta...>, Keys>...>, kel::lbm::encode::Sycl<Encode>> final { public: static constexpr data<schema::FixedArray meta = {{Meta...}}; using StorageT = std::tuple<data<Members::Type::InnerSchema,Encode>*...>; |
