diff options
author | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-22 11:45:47 +0200 |
---|---|---|
committer | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-22 11:45:47 +0200 |
commit | 1fb10980808d66dfa6dec4ac87857d5c13bf7298 (patch) | |
tree | 02753bd4f81b9df25fc2e3edd1542b9b2df22fb9 /modules/codec/c++/data.hpp | |
parent | 0a80ef11db96a9259d9ec01d7d4d7e9023f3184c (diff) |
Removing storage as a parameter
Diffstat (limited to 'modules/codec/c++/data.hpp')
-rw-r--r-- | modules/codec/c++/data.hpp | 123 |
1 files changed, 60 insertions, 63 deletions
diff --git a/modules/codec/c++/data.hpp b/modules/codec/c++/data.hpp index 77edf8e..5d3e4ee 100644 --- a/modules/codec/c++/data.hpp +++ b/modules/codec/c++/data.hpp @@ -17,9 +17,6 @@ #include "schema_meta.hpp" namespace saw { -namespace storage { -struct Default {}; -} namespace encode { struct Native { @@ -85,7 +82,7 @@ struct native_data_type<schema::Primitive<schema::FloatingPoint, 8>> { using type = double; }; -template<typename T, typename Encoding = encode::Native, typename Storage = storage::Default> +template<typename T, typename Encoding = encode::Native> class data { private: static_assert(always_false<T>, "Type not supported."); @@ -121,8 +118,8 @@ public: } }; -template<typename T, size_t N, typename Storage> -class data<schema::Primitive<T,N>, encode::Native, Storage> { +template<typename T, size_t N> +class data<schema::Primitive<T,N>, encode::Native> { public: using Schema = schema::Primitive<T,N>; using MetaSchema = typename meta_schema<Schema>::MetaSchema; @@ -144,29 +141,29 @@ public: typename native_data_type<Schema>::type get() const {return value_;} - data<Schema, encode::Native, Storage> operator*(const data<Schema, encode::Native, Storage>& rhs)const{ + data<Schema, encode::Native> operator*(const data<Schema, encode::Native>& rhs)const{ return {get() * rhs.get()}; } - data<Schema, encode::Native, Storage> operator/(const data<Schema, encode::Native, Storage>& rhs)const{ + data<Schema, encode::Native> operator/(const data<Schema, encode::Native>& rhs)const{ return {get() / rhs.get()}; } - data<Schema, encode::Native, Storage> operator+(const data<Schema, encode::Native, Storage>& rhs)const{ + data<Schema, encode::Native> operator+(const data<Schema, encode::Native>& rhs)const{ return {get() + rhs.get()}; } - data<Schema, encode::Native, Storage>& operator+=(const data<Schema, encode::Native, Storage>& rhs)const{ + data<Schema, encode::Native>& operator+=(const data<Schema, encode::Native>& rhs)const{ value_ += rhs.get(); return *this; } - data<Schema, encode::Native, Storage>& operator-=(const data<Schema, encode::Native, Storage>& rhs)const{ + data<Schema, encode::Native>& operator-=(const data<Schema, encode::Native>& rhs)const{ value_ -= rhs.get(); return *this; } - data<Schema, encode::Native, Storage> operator-(const data<Schema, encode::Native, Storage>& rhs)const{ + data<Schema, encode::Native> operator-(const data<Schema, encode::Native>& rhs)const{ return {get() - rhs.get()}; } @@ -184,7 +181,7 @@ public: * Casts */ template<typename Target> - data<Target, encode::Native, Storage> cast_to() const { + data<Target, encode::Native> cast_to() const { auto raw_to = static_cast<typename saw::native_data_type<Target>::type>(value_); return {raw_to}; } @@ -193,13 +190,13 @@ public: /** * Mixed precision class for native formats */ -template<typename TA, uint64_t NA, typename TB, uint64_t NB, typename Storage> -class data<schema::MixedPrecision<schema::Primitive<TA,NA>, schema::Primitive<TB,NB>>, encode::Native, Storage>{ +template<typename TA, uint64_t NA, typename TB, uint64_t NB> +class data<schema::MixedPrecision<schema::Primitive<TA,NA>, schema::Primitive<TB,NB>>, encode::Native>{ public: using Schema = schema::MixedPrecision<schema::Primitive<TA,NA>, schema::Primitive<TB,NB>>; using MetaSchema = typename meta_schema<Schema>::MetaSchema; private: - data<typename Schema::StorageSchema, encode::Native, Storage> value_; + data<typename Schema::StorageSchema, encode::Native> value_; public: data():value_{}{} data(data<MetaSchema, encode::Native>):value_{}{} @@ -210,7 +207,7 @@ public: return value_.template cast_to<typename Schema::InterfaceSchema>().get(); } - data(const saw::data<typename Schema::InterfaceSchema, encode::Native, Storage>& val){ + data(const saw::data<typename Schema::InterfaceSchema, encode::Native>& val){ value_ = val.template cast_to<typename Schema::StorageSchema>(); } @@ -218,65 +215,65 @@ public: value_.set(static_cast<typename Schema::StorageSchema>(val)); } - data<Schema, encode::Native, Storage> operator*(const data<Schema, encode::Native, Storage>& rhs) const { + data<Schema, encode::Native> operator*(const data<Schema, encode::Native>& rhs) const { using CalcType = typename native_data_type<typename Schema::InterfaceSchema>::type; CalcType left = static_cast<CalcType>(value_.get()); CalcType right = static_cast<CalcType>(rhs.get()); return {left * right}; } - data<typename Schema::InterfaceSchema, encode::Native, Storage> operator*(const data<typename Schema::InterfaceSchema, encode::Native, Storage>& rhs) const { + data<typename Schema::InterfaceSchema, encode::Native> operator*(const data<typename Schema::InterfaceSchema, encode::Native>& rhs) const { using CalcType = typename native_data_type<typename Schema::InterfaceSchema>::type; CalcType left = static_cast<CalcType>(value_.get()); CalcType right = rhs.get(); return {left * right}; } - data<typename Schema::InterfaceSchema, encode::Native, Storage> operator/(const data<Schema, encode::Native, Storage>& rhs)const{ + data<typename Schema::InterfaceSchema, encode::Native> operator/(const data<Schema, encode::Native>& rhs)const{ using CalcType = typename native_data_type<typename Schema::InterfaceSchema>::type; CalcType left = static_cast<CalcType>(value_.get()); CalcType right = static_cast<CalcType>(rhs.get()); return {left / right}; } - data<typename Schema::InterfaceSchema, encode::Native, Storage> operator+(const data<Schema, encode::Native, Storage>& rhs)const{ + data<typename Schema::InterfaceSchema, encode::Native> operator+(const data<Schema, encode::Native>& rhs)const{ using CalcType = typename native_data_type<typename Schema::InterfaceSchema>::type; CalcType left = static_cast<CalcType>(value_.get()); CalcType right = static_cast<CalcType>(rhs.get()); return {left + right}; } - data<Schema, encode::Native, Storage>& operator+=(const data<Schema, encode::Native, Storage>& rhs)const{ + data<Schema, encode::Native>& operator+=(const data<Schema, encode::Native>& rhs)const{ *this = *this + rhs.get(); return *this; } - data<typename Schema::InterfaceSchema, encode::Native, Storage> operator-(const data<Schema, encode::Native, Storage>& rhs)const{ + data<typename Schema::InterfaceSchema, encode::Native> operator-(const data<Schema, encode::Native>& rhs)const{ using CalcType = typename native_data_type<typename Schema::InterfaceSchema>::type; CalcType left = static_cast<CalcType>(value_.get()); CalcType right = static_cast<CalcType>(rhs.get()); return {left - right}; } - data<Schema, encode::Native, Storage>& operator-=(const data<Schema, encode::Native, Storage>& rhs) const { + data<Schema, encode::Native>& operator-=(const data<Schema, encode::Native>& rhs) const { *this = *this - rhs.get(); return *this; } template<typename Enc> - bool operator==(const data<Schema, Enc, Storage>& rhs)const{ + bool operator==(const data<Schema, Enc>& rhs)const{ return get() == rhs.get(); } template<typename Enc> - bool operator<(const data<Schema, Enc, Storage>& rhs) const { + bool operator<(const data<Schema, Enc>& rhs) const { return get() < rhs.get(); } }; /* template<typename T, typename N> -class data<schema::Ref<schema::Primitive<T,N>>, encode::Native, storage::Default { +class data<schema::Ref<schema::Primitive<T,N>>, encode::Native { public: using Schema = schema::Ref<schema::Primitive<T,N>>; private: @@ -299,16 +296,16 @@ public: * Union type for native data classes */ template<typename... T, string_literal... literals> -class data<schema::Union<schema::Member<T, literals>...>, encode::Native, storage::Default> { +class data<schema::Union<schema::Member<T, literals>...>, encode::Native> { public: using Schema = schema::Union<schema::Member<T,literals>...>; using MetaSchema = typename meta_schema<Schema>::MetaSchema; private: - std::variant<data<T,encode::Native, storage::Default>...> value_; + std::variant<data<T,encode::Native>...> value_; template<uint64_t i = 0u> struct init_helper { - static void apply(std::variant<data<T,encode::Native,storage::Default>...>& val, data<MetaSchema, encode::Native>&& init){ + static void apply(std::variant<data<T,encode::Native>...>& val, data<MetaSchema, encode::Native>&& init){ if( init.index() == i ){ auto& val_i = val.template init<i>(); val_i = {std::move(init.template get<i>())}; @@ -332,12 +329,12 @@ public: SAW_DEFAULT_MOVE(data); template<string_literal lit> - void set(data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value, T...>::type, encode::Native, storage::Default> val){ + void set(data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value, T...>::type, encode::Native> val){ value_ = std::move(val); } template<string_literal lit> - data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value, T...>::type, encode::Native, storage::Default>& init(){ + data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value, T...>::type, encode::Native>& init(){ value_.template emplace<parameter_key_pack_index<lit, literals...>::value>(); return get<lit>(); } @@ -348,12 +345,12 @@ public: } template<string_literal lit> - data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value, T...>::type, encode::Native, storage::Default>& get(){ + data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value, T...>::type, encode::Native>& get(){ return std::get<parameter_key_pack_index<lit, literals...>::value>(value_); } template<string_literal lit> - const data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value, T...>::type, encode::Native, storage::Default>& get() const{ + const data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value, T...>::type, encode::Native>& get() const{ return std::get<parameter_key_pack_index<lit, literals...>::value>(value_); } }; @@ -362,7 +359,7 @@ public: * Data class which represents a struct in the native format. */ template<typename... T, string_literal... literals> -class data<schema::Struct<schema::Member<T, literals>...>, encode::Native, storage::Default> { +class data<schema::Struct<schema::Member<T, literals>...>, encode::Native> { public: using Schema = schema::Struct<schema::Member<T,literals>...>; using MetaSchema = typename meta_schema<Schema>::MetaSchema; @@ -370,11 +367,11 @@ private: /** * Tuple storing the member values. */ - std::tuple<data<T,encode::Native, storage::Default>...> value_; + std::tuple<data<T,encode::Native>...> value_; template<uint64_t i = 0u> struct init_helper { - static void apply(std::tuple<data<T,encode::Native,storage::Default>...>& val, data<Schema, encode::Native>&& init){ + static void apply(std::tuple<data<T,encode::Native>...>& val, data<Schema, encode::Native>&& init){ auto& val_i = val.template get<i>(); auto& init_i = init.template get<i>(); @@ -409,7 +406,7 @@ public: literal, literals... >::value , T...>::type - , encode::Native, storage::Default>& get(){ + , encode::Native>& get(){ return std::get<parameter_key_pack_index<literal, literals...>::value>(value_); } @@ -423,7 +420,7 @@ public: literal, literals... >::value , T...>::type - , encode::Native, storage::Default>& get() const { + , encode::Native>& get() const { return std::get<parameter_key_pack_index<literal, literals...>::value>(value_); } @@ -436,16 +433,16 @@ public: }; template<typename... T> -class data<schema::Tuple<T...>, encode::Native, storage::Default> { +class data<schema::Tuple<T...>, encode::Native> { public: using Schema = schema::Tuple<T...>; using MetaSchema = typename meta_schema<Schema>::MetaSchema; private: - std::tuple<data<T,encode::Native, storage::Default>...> value_; + std::tuple<data<T,encode::Native>...> value_; template<uint64_t i = 0u> struct init_helper { - static void apply(std::tuple<data<T,encode::Native,storage::Default>...>& val, data<MetaSchema, encode::Native>&& init){ + static void apply(std::tuple<data<T,encode::Native>...>& val, data<MetaSchema, encode::Native>&& init){ auto& val_i = val.template get<i>(); auto& init_i = init.template get<i>(); @@ -468,12 +465,12 @@ public: SAW_DEFAULT_MOVE(data); template<size_t i> - data<typename parameter_pack_type<i,T...>::type, encode::Native, storage::Default>& get(){ + data<typename parameter_pack_type<i,T...>::type, encode::Native>& get(){ return std::get<i>(value_); } template<size_t i> - const data<typename parameter_pack_type<i,T...>::type, encode::Native, storage::Default>& get() const{ + const data<typename parameter_pack_type<i,T...>::type, encode::Native>& get() const{ return std::get<i>(value_); } @@ -524,14 +521,14 @@ public: }; template<typename T, size_t Dim> -class data<schema::Array<T,Dim>, encode::Native, storage::Default> { +class data<schema::Array<T,Dim>, encode::Native> { public: using Schema = schema::Array<T,Dim>; using MetaSchema = typename meta_schema<Schema>::MetaSchema; private: // data<schema::FixedArray<schema::UInt64, Dim>> dims_; std::array<uint64_t, Dim> dims_; - std::vector<data<T, encode::Native, storage::Default>> value_; + std::vector<data<T, encode::Native>> value_; uint64_t get_full_size() const { uint64_t s = 1; @@ -570,7 +567,7 @@ class data<schema::Array<T,Dim>, encode::Native, storage::Default> { } template<size_t i = 0> - error_or<void> add(saw::data<T,encode::Native, storage::Default> data){ + error_or<void> add(saw::data<T,encode::Native> data){ /** @todo * Generally the last dimension can always accept a element so to say. * Changing the others would require moving data due to the stride changing. @@ -605,29 +602,29 @@ class data<schema::Array<T,Dim>, encode::Native, storage::Default> { static_assert(sizeof...(Dims)==Dim, "Argument size must be equal to the Dimension"); } - data<T, encode::Native, storage::Default>& at(const std::array<uint64_t, Dim>& ind){ + data<T, encode::Native>& at(const std::array<uint64_t, Dim>& ind){ return value_.at(this->get_flat_index(ind)); } - const data<T, encode::Native, storage::Default>& at(const std::array<uint64_t, Dim>& ind) const { + const data<T, encode::Native>& at(const std::array<uint64_t, Dim>& ind) const { return value_.at(this->get_flat_index(ind)); } template<std::integral... Dims> - data<T, encode::Native, storage::Default>& at(Dims... i){ + data<T, encode::Native>& at(Dims... i){ return value_.at(this->get_flat_index(std::array<uint64_t, Dim>{static_cast<uint64_t>(i)...})); } template<std::integral... Dims> - const data<T, encode::Native, storage::Default>& at(Dims... i) const { + const data<T, encode::Native>& at(Dims... i) const { return value_.at(this->get_flat_index(std::array<uint64_t, Dim>{static_cast<uint64_t>(i)...})); } - data<T,encode::Native, storage::Default>& at(const data<schema::FixedArray<schema::UInt64,Dim>>& i){ + data<T,encode::Native>& at(const data<schema::FixedArray<schema::UInt64,Dim>>& i){ return value_.at(this->get_flat_index(i)); } - const data<T,encode::Native, storage::Default>& at(const data<schema::FixedArray<schema::UInt64,Dim>>& i)const{ + const data<T,encode::Native>& at(const data<schema::FixedArray<schema::UInt64,Dim>>& i)const{ return value_.at(this->get_flat_index(i)); } @@ -675,14 +672,14 @@ private: }; template<typename T, uint64_t... D> -class data<schema::FixedArray<T,D...>, encode::Native, storage::Default> { +class data<schema::FixedArray<T,D...>, encode::Native> { public: using Schema = schema::FixedArray<T,D...>; using MetaSchema = typename meta_schema<Schema>::MetaSchema; private: - //using inner_type = std::array<data<T, encode::Native, storage::Default>, multiply_helper<Dims...>::value>; + //using inner_type = std::array<data<T, encode::Native>, multiply_helper<Dims...>::value>; //std::unique_ptr<inner_type> value_; - using ArrayT = std::array<data<T, encode::Native, storage::Default>, ct_multiply<uint64_t, D...>::value>; + using ArrayT = std::array<data<T, encode::Native>, ct_multiply<uint64_t, D...>::value>; ArrayT value_; public: @@ -692,29 +689,29 @@ public: value_{value__} {} - data<T, encode::Native, storage::Default>& at(const std::array<uint64_t, sizeof...(D)>& ind){ + data<T, encode::Native>& at(const std::array<uint64_t, sizeof...(D)>& ind){ return value_.at(this->get_flat_index(ind)); } - const data<T, encode::Native, storage::Default>& at(const std::array<uint64_t, sizeof...(D)>& ind) const { + const data<T, encode::Native>& at(const std::array<uint64_t, sizeof...(D)>& ind) const { return value_.at(this->get_flat_index(ind)); } template<std::integral... Dims> - data<T, encode::Native, storage::Default>& at(Dims... i) { + data<T, encode::Native>& at(Dims... i) { return value_.at(this->get_flat_index({i...})); } template<std::integral... Dims> - const data<T, encode::Native, storage::Default>& at(Dims... i) const { + const data<T, encode::Native>& at(Dims... i) const { return value_.at(this->get_flat_index({i...})); } - data<T, encode::Native, storage::Default>& at(const data<schema::FixedArray<schema::UInt64, sizeof...(D)>>& i){ + data<T, encode::Native>& at(const data<schema::FixedArray<schema::UInt64, sizeof...(D)>>& i){ return value_.at(this->get_flat_index(i)); } - const data<T, encode::Native, storage::Default>& at(const data<schema::FixedArray<schema::UInt64, sizeof...(D)>>& i)const{ + const data<T, encode::Native>& at(const data<schema::FixedArray<schema::UInt64, sizeof...(D)>>& i)const{ return value_.at(this->get_flat_index(i)); } @@ -748,7 +745,7 @@ private: * Data type representing string. */ template<> -class data<schema::String, encode::Native, storage::Default> { +class data<schema::String, encode::Native> { public: using Schema = schema::String; using MetaSchema = typename meta_schema<Schema>::MetaSchema; |