From c1572ff1c275145208333e3e69c29c569689e51b Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Wed, 17 Apr 2024 15:03:09 +0200 Subject: Moved to platform description in structs --- modules/codec/c++/data.hpp | 88 ++++++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 42 deletions(-) (limited to 'modules/codec/c++') diff --git a/modules/codec/c++/data.hpp b/modules/codec/c++/data.hpp index 2adb5b7..7cf3e75 100644 --- a/modules/codec/c++/data.hpp +++ b/modules/codec/c++/data.hpp @@ -15,7 +15,11 @@ #include "schema.hpp" namespace saw { +namespace rmt { +struct Host {}; +} namespace encode { +template struct Native {}; } template @@ -76,14 +80,14 @@ struct native_data_type> { using type = double; }; -template +template> class data { private: static_assert(always_false, "Type not supported"); }; template -class data, encode::Native> { +class data, encode::Native> { private: typename native_data_type>::type value_; public: @@ -101,19 +105,19 @@ public: typename native_data_type>::type get() const {return value_;} - data, encode::Native> operator*(const data, encode::Native>& rhs)const{ + data, encode::Native> operator*(const data, encode::Native>& rhs)const{ return {get() * rhs.get()}; } - data, encode::Native> operator/(const data, encode::Native>& rhs)const{ + data, encode::Native> operator/(const data, encode::Native>& rhs)const{ return {get() / rhs.get()}; } - data, encode::Native> operator+(const data, encode::Native>& rhs)const{ + data, encode::Native> operator+(const data, encode::Native>& rhs)const{ return {get() + rhs.get()}; } - data, encode::Native> operator-(const data, encode::Native>& rhs)const{ + data, encode::Native> operator-(const data, encode::Native>& rhs)const{ return {get() - rhs.get()}; } @@ -131,18 +135,18 @@ public: * Casts */ template - data cast_to(){ + data> cast_to(){ auto raw_to = static_cast::type>(value_); return {raw_to}; } }; template -class data, schema::Primitive>, encode::Native>{ +class data, schema::Primitive>, encode::Native>{ public: using Schema = schema::MixedPrecision, schema::Primitive>; private: - data value_; + data> value_; public: data():value_{}{} @@ -158,9 +162,9 @@ public: }; template -class data...>, encode::Native> { +class data...>, encode::Native> { private: - std::variant...> value_; + std::variant>...> value_; public: data() = default; @@ -168,12 +172,12 @@ public: SAW_DEFAULT_MOVE(data); template - void set(data::value, T...>::type, encode::Native> val){ + void set(data::value, T...>::type, encode::Native> val){ value_ = std::move(val); } template - data::value, T...>::type, encode::Native>& init(){ + data::value, T...>::type, encode::Native>& init(){ value_.template emplace::value>(); return get(); } @@ -184,20 +188,20 @@ public: } template - data::value, T...>::type, encode::Native>& get(){ + data::value, T...>::type, encode::Native>& get(){ return std::get::value>(value_); } template - const data::value, T...>::type, encode::Native>& get() const{ + const data::value, T...>::type, encode::Native>& get() const{ return std::get::value>(value_); } }; template -class data...>, encode::Native> { +class data...>, encode::Native> { private: - std::tuple...> value_; + std::tuple>...> value_; public: data() = default; SAW_DEFAULT_COPY(data); @@ -210,7 +214,7 @@ public: literal, literals... >::value , T...>::type - , encode::Native>& get(){ + , encode::Native>& get(){ return std::get::value>(value_); } @@ -221,7 +225,7 @@ public: literal, literals... >::value , T...>::type - , encode::Native>& get() const { + , encode::Native>& get() const { return std::get::value>(value_); } @@ -231,21 +235,21 @@ public: }; template -class data, encode::Native> { +class data, encode::Native> { private: - std::tuple...> value_; + std::tuple>...> value_; public: data() = default; SAW_DEFAULT_COPY(data); SAW_DEFAULT_MOVE(data); template - data::type, encode::Native>& get(){ + data::type, encode::Native>& get(){ return std::get(value_); } template - const data::type, encode::Native>& get() const{ + const data::type, encode::Native>& get() const{ return std::get(value_); } @@ -255,11 +259,11 @@ public: }; template -class data, encode::Native> { +class data, encode::Native> { private: // data> dims_; std::array dims_; - std::vector> value_; + std::vector>> value_; uint64_t get_full_size() const { uint64_t s = 1; @@ -291,7 +295,7 @@ class data, encode::Native> { } template - error_or add(saw::data data){ + error_or add(saw::data> 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. @@ -326,29 +330,29 @@ class data, encode::Native> { static_assert(sizeof...(Dims)==Dim, "Argument size must be equal to the Dimension"); } - data& at(const std::array& ind){ + data>& at(const std::array& ind){ return value_.at(this->get_flat_index(ind)); } - const data& at(const std::array& ind) const { + const data>& at(const std::array& ind) const { return value_.at(this->get_flat_index(ind)); } template - data& at(Dims... i){ + data>& at(Dims... i){ return value_.at(this->get_flat_index(std::array{static_cast(i)...})); } template - const data& at(Dims... i) const { + const data>& at(Dims... i) const { return value_.at(this->get_flat_index(std::array{static_cast(i)...})); } - data& at(const data>& i){ + data>& at(const data>& i){ return value_.at(this->get_flat_index(i)); } - const data& at(const data>& i)const{ + const data>& at(const data>& i)const{ return value_.at(this->get_flat_index(i)); } @@ -396,39 +400,39 @@ private: }; template -class data, encode::Native> { +class data, encode::Native> { private: - //using inner_type = std::array, multiply_helper::value>; + //using inner_type = std::array>, multiply_helper::value>; //std::unique_ptr value_; - using ArrayT = std::array, ct_multiply::value>; + using ArrayT = std::array>, ct_multiply::value>; ArrayT value_; public: data() = default; - data& at(const std::array& ind){ + data>& at(const std::array& ind){ return value_.at(this->get_flat_index(ind)); } - const data& at(const std::array& ind) const { + const data>& at(const std::array& ind) const { return value_.at(this->get_flat_index(ind)); } template - data& at(Dims... i) { + data>& at(Dims... i) { return value_.at(this->get_flat_index({i...})); } template - const data& at(Dims... i) const { + const data>& at(Dims... i) const { return value_.at(this->get_flat_index({i...})); } - data& at(const data>& i){ + data>& at(const data>& i){ return value_.at(this->get_flat_index(i)); } - const data& at(const data>& i)const{ + const data>& at(const data>& i)const{ return value_.at(this->get_flat_index(i)); } @@ -459,7 +463,7 @@ private: }; template<> -class data { +class data> { private: std::string value_; public: -- cgit v1.2.3