diff options
author | Claudius "keldu" Holeksa <mail@keldu.de> | 2025-03-18 14:31:00 +0100 |
---|---|---|
committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2025-03-18 14:31:00 +0100 |
commit | e37725e87c2f1594dc2e3d300b16341ab937a918 (patch) | |
tree | ca700888be7039aba09936a34354a71a6c1ba1d1 /c++/descriptor.h | |
parent | e62705ba9e4a6bcaae81df0d0a1c6b46a355c13f (diff) |
wip
Diffstat (limited to 'c++/descriptor.h')
-rw-r--r-- | c++/descriptor.h | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/c++/descriptor.h b/c++/descriptor.h index ce72180..6a4488d 100644 --- a/c++/descriptor.h +++ b/c++/descriptor.h @@ -22,23 +22,17 @@ struct Cell { static constexpr uint64_t Size = SC + Desc::D * DC + Desc::Q * QC; }; -template<typename CellT> -struct Field { - using Cell = CellT; -}; +template<typename Desc, typename CellStruct> +struct Field; -/** - * T... is restricted to Member schemas - */ -template<typename... CellT> -using CellData = Struct< - CellT... +template<typename Desc, typename... CellMembers> +struct Field< + Desc, + Struct< + CellMembers... + > >; -/** - * T is an array of CellData - */ -template<typename T, size_t D> -using Lattice = Array<T, D>; + } template<typename T, typename Desc> @@ -69,9 +63,15 @@ class df_info<T,sch::Descriptor<2, 5>> { namespace saw { template<typename T, typename Desc, uint64_t S, uint64_t D, uint64_t Q> -struct meta_schema<kel::lbm::sch::Cell<Sch,Desc,S,D,Q>> { +struct meta_schema<kel::lbm::sch::Cell<T,Desc,S,D,Q>> { using MetaSchema = schema::Void; - using Schema = kel::lbm::sch::Cell<Sch,Desc,S,D,Q>; + using Schema = kel::lbm::sch::Cell<T,Desc,S,D,Q>; +}; + +template<typename Desc, typename CellT> +struct meta_schema<kel::lbm::sch::Field<Desc, CellT>> { + using MetaSchema = schema::FixedArray<schema::UInt64,CellT::Descriptor::D>; + using Schema = kel::lbm::sch::Field<Desc, CellT>; }; template<typename Sch, typename Desc, uint64_t S, uint64_t D, uint64_t Q, typename Encode> @@ -88,16 +88,22 @@ public: } }; -template<typename CellT, typename Encode> -class data<kel::lbm::sch::Field<CellT>, Encode> final { +template<typename Desc, typename CellT, typename Encode> +class data<kel::lbm::sch::Field<Desc, CellT>, Encode> final { private: - data<schema::Array<CellT,CellT::Desc::D>, Encode> inner_; + data<schema::Array<CellT,Desc::D>, Encode> inner_; public: - data(const data<schema::FixedArray<schema::UInt64, CellT::Desc::D>>& inner_meta__): + data(const data<schema::FixedArray<schema::UInt64, Desc::D>>& inner_meta__): inner_{inner_meta__} {} - data<CellT>& operator()(const data<schema::FixedArray<schema::UInt64>, Encode>& index){ + template<uint64_t i> + data<schema::UInt64,Encode> get_dim_size() const { + static_assert(i < Desc::D, "Not enough dimensions"); + return inner_.template get_dim_size<i>(); + } + + data<CellT>& operator()(const data<schema::FixedArray<schema::UInt64, Desc::D>, Encode>& index){ return inner_(index); } }; |