diff options
Diffstat (limited to 'modules/codec')
-rw-r--r-- | modules/codec/SConstruct | 1 | ||||
-rw-r--r-- | modules/codec/c++/data.hpp | 88 | ||||
-rw-r--r-- | modules/codec/tests/codec.cpp | 58 | ||||
-rw-r--r-- | modules/codec/tests/csv.cpp | 2 |
4 files changed, 77 insertions, 72 deletions
diff --git a/modules/codec/SConstruct b/modules/codec/SConstruct index 364f1fe..d4bc519 100644 --- a/modules/codec/SConstruct +++ b/modules/codec/SConstruct @@ -44,6 +44,7 @@ env_vars.Add('prefix', ) env=Environment(ENV=os.environ, variables=env_vars, CPPPATH=[], + CXX=['c++'], CPPDEFINES=['SAW_UNIX'], CXXFLAGS=['-std=c++20','-g','-Wall','-Wextra'], LIBS=['forstio-core'] 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<typename Platform = rmt::Host> struct Native {}; } template<typename Schema, typename Encode> @@ -76,14 +80,14 @@ struct native_data_type<schema::Primitive<schema::FloatingPoint, 8>> { using type = double; }; -template<typename T, typename Encoding = encode::Native> +template<typename T, typename Encoding = encode::Native<rmt::Host>> class data { private: static_assert(always_false<T>, "Type not supported"); }; template<typename T, size_t N> -class data<schema::Primitive<T,N>, encode::Native> { +class data<schema::Primitive<T,N>, encode::Native<rmt::Host>> { private: typename native_data_type<schema::Primitive<T,N>>::type value_; public: @@ -101,19 +105,19 @@ public: typename native_data_type<schema::Primitive<T,N>>::type get() const {return value_;} - data<schema::Primitive<T,N>, encode::Native> operator*(const data<schema::Primitive<T,N>, encode::Native>& rhs)const{ + data<schema::Primitive<T,N>, encode::Native<rmt::Host>> operator*(const data<schema::Primitive<T,N>, encode::Native<rmt::Host>>& rhs)const{ return {get() * rhs.get()}; } - data<schema::Primitive<T,N>, encode::Native> operator/(const data<schema::Primitive<T,N>, encode::Native>& rhs)const{ + data<schema::Primitive<T,N>, encode::Native<rmt::Host>> operator/(const data<schema::Primitive<T,N>, encode::Native<rmt::Host>>& rhs)const{ return {get() / rhs.get()}; } - data<schema::Primitive<T,N>, encode::Native> operator+(const data<schema::Primitive<T,N>, encode::Native>& rhs)const{ + data<schema::Primitive<T,N>, encode::Native<rmt::Host>> operator+(const data<schema::Primitive<T,N>, encode::Native<rmt::Host>>& rhs)const{ return {get() + rhs.get()}; } - data<schema::Primitive<T,N>, encode::Native> operator-(const data<schema::Primitive<T,N>, encode::Native>& rhs)const{ + data<schema::Primitive<T,N>, encode::Native<rmt::Host>> operator-(const data<schema::Primitive<T,N>, encode::Native<rmt::Host>>& rhs)const{ return {get() - rhs.get()}; } @@ -131,18 +135,18 @@ public: * Casts */ template<typename Target> - data<Target, encode::Native> cast_to(){ + data<Target, encode::Native<rmt::Host>> cast_to(){ auto raw_to = static_cast<typename saw::native_data_type<Target>::type>(value_); return {raw_to}; } }; 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>{ +class data<schema::MixedPrecision<schema::Primitive<TA,NA>, schema::Primitive<TB,NB>>, encode::Native<rmt::Host>>{ public: using Schema = schema::MixedPrecision<schema::Primitive<TA,NA>, schema::Primitive<TB,NB>>; private: - data<typename Schema::StorageSchema, encode::Native> value_; + data<typename Schema::StorageSchema, encode::Native<rmt::Host>> value_; public: data():value_{}{} @@ -158,9 +162,9 @@ public: }; template<typename... T, string_literal... literals> -class data<schema::Union<schema::Member<T, literals>...>, encode::Native> { +class data<schema::Union<schema::Member<T, literals>...>, encode::Native<rmt::Host>> { private: - std::variant<data<T,encode::Native>...> value_; + std::variant<data<T,encode::Native<rmt::Host>>...> value_; public: data() = default; @@ -168,12 +172,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> val){ + void set(data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value, T...>::type, encode::Native<rmt::Host>> 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>& init(){ + data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value, T...>::type, encode::Native<rmt::Host>>& init(){ value_.template emplace<parameter_key_pack_index<lit, literals...>::value>(); return get<lit>(); } @@ -184,20 +188,20 @@ public: } template<string_literal lit> - data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value, T...>::type, encode::Native>& get(){ + data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value, T...>::type, encode::Native<rmt::Host>>& 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>& get() const{ + const data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value, T...>::type, encode::Native<rmt::Host>>& get() const{ return std::get<parameter_key_pack_index<lit, literals...>::value>(value_); } }; template<typename... T, string_literal... literals> -class data<schema::Struct<schema::Member<T, literals>...>, encode::Native> { +class data<schema::Struct<schema::Member<T, literals>...>, encode::Native<rmt::Host>> { private: - std::tuple<data<T,encode::Native>...> value_; + std::tuple<data<T,encode::Native<rmt::Host>>...> value_; public: data() = default; SAW_DEFAULT_COPY(data); @@ -210,7 +214,7 @@ public: literal, literals... >::value , T...>::type - , encode::Native>& get(){ + , encode::Native<rmt::Host>>& get(){ return std::get<parameter_key_pack_index<literal, literals...>::value>(value_); } @@ -221,7 +225,7 @@ public: literal, literals... >::value , T...>::type - , encode::Native>& get() const { + , encode::Native<rmt::Host>>& get() const { return std::get<parameter_key_pack_index<literal, literals...>::value>(value_); } @@ -231,21 +235,21 @@ public: }; template<typename... T> -class data<schema::Tuple<T...>, encode::Native> { +class data<schema::Tuple<T...>, encode::Native<rmt::Host>> { private: - std::tuple<data<T,encode::Native>...> value_; + std::tuple<data<T,encode::Native<rmt::Host>>...> value_; public: data() = default; SAW_DEFAULT_COPY(data); SAW_DEFAULT_MOVE(data); template<size_t i> - data<typename parameter_pack_type<i,T...>::type, encode::Native>& get(){ + data<typename parameter_pack_type<i,T...>::type, encode::Native<rmt::Host>>& get(){ return std::get<i>(value_); } template<size_t i> - const data<typename parameter_pack_type<i,T...>::type, encode::Native>& get() const{ + const data<typename parameter_pack_type<i,T...>::type, encode::Native<rmt::Host>>& get() const{ return std::get<i>(value_); } @@ -255,11 +259,11 @@ public: }; template<typename T, size_t Dim> -class data<schema::Array<T,Dim>, encode::Native> { +class data<schema::Array<T,Dim>, encode::Native<rmt::Host>> { private: // data<schema::FixedArray<schema::UInt64, Dim>> dims_; std::array<uint64_t, Dim> dims_; - std::vector<data<T, encode::Native>> value_; + std::vector<data<T, encode::Native<rmt::Host>>> value_; uint64_t get_full_size() const { uint64_t s = 1; @@ -291,7 +295,7 @@ class data<schema::Array<T,Dim>, encode::Native> { } template<size_t i = 0> - error_or<void> add(saw::data<T,encode::Native> data){ + error_or<void> add(saw::data<T,encode::Native<rmt::Host>> 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<schema::Array<T,Dim>, encode::Native> { static_assert(sizeof...(Dims)==Dim, "Argument size must be equal to the Dimension"); } - data<T, encode::Native>& at(const std::array<uint64_t, Dim>& ind){ + data<T, encode::Native<rmt::Host>>& at(const std::array<uint64_t, Dim>& ind){ return value_.at(this->get_flat_index(ind)); } - const data<T, encode::Native>& at(const std::array<uint64_t, Dim>& ind) const { + const data<T, encode::Native<rmt::Host>>& 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>& at(Dims... i){ + data<T, encode::Native<rmt::Host>>& 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>& at(Dims... i) const { + const data<T, encode::Native<rmt::Host>>& 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>& at(const data<schema::FixedArray<schema::UInt64,Dim>>& i){ + data<T,encode::Native<rmt::Host>>& at(const data<schema::FixedArray<schema::UInt64,Dim>>& i){ return value_.at(this->get_flat_index(i)); } - const data<T,encode::Native>& at(const data<schema::FixedArray<schema::UInt64,Dim>>& i)const{ + const data<T,encode::Native<rmt::Host>>& at(const data<schema::FixedArray<schema::UInt64,Dim>>& i)const{ return value_.at(this->get_flat_index(i)); } @@ -396,39 +400,39 @@ private: }; template<typename T, uint64_t... D> -class data<schema::FixedArray<T,D...>, encode::Native> { +class data<schema::FixedArray<T,D...>, encode::Native<rmt::Host>> { private: - //using inner_type = std::array<data<T, encode::Native>, multiply_helper<Dims...>::value>; + //using inner_type = std::array<data<T, encode::Native<rmt::Host>>, multiply_helper<Dims...>::value>; //std::unique_ptr<inner_type> value_; - using ArrayT = std::array<data<T, encode::Native>, ct_multiply<uint64_t, D...>::value>; + using ArrayT = std::array<data<T, encode::Native<rmt::Host>>, ct_multiply<uint64_t, D...>::value>; ArrayT value_; public: data() = default; - data<T, encode::Native>& at(const std::array<uint64_t, sizeof...(D)>& ind){ + data<T, encode::Native<rmt::Host>>& at(const std::array<uint64_t, sizeof...(D)>& ind){ return value_.at(this->get_flat_index(ind)); } - const data<T, encode::Native>& at(const std::array<uint64_t, sizeof...(D)>& ind) const { + const data<T, encode::Native<rmt::Host>>& 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>& at(Dims... i) { + data<T, encode::Native<rmt::Host>>& at(Dims... i) { return value_.at(this->get_flat_index({i...})); } template<std::integral... Dims> - const data<T, encode::Native>& at(Dims... i) const { + const data<T, encode::Native<rmt::Host>>& at(Dims... i) const { return value_.at(this->get_flat_index({i...})); } - data<T, encode::Native>& at(const data<schema::FixedArray<schema::UInt64, sizeof...(D)>>& i){ + data<T, encode::Native<rmt::Host>>& at(const data<schema::FixedArray<schema::UInt64, sizeof...(D)>>& i){ return value_.at(this->get_flat_index(i)); } - const data<T, encode::Native>& at(const data<schema::FixedArray<schema::UInt64, sizeof...(D)>>& i)const{ + const data<T, encode::Native<rmt::Host>>& at(const data<schema::FixedArray<schema::UInt64, sizeof...(D)>>& i)const{ return value_.at(this->get_flat_index(i)); } @@ -459,7 +463,7 @@ private: }; template<> -class data<schema::String, encode::Native> { +class data<schema::String, encode::Native<rmt::Host>> { private: std::string value_; public: diff --git a/modules/codec/tests/codec.cpp b/modules/codec/tests/codec.cpp index 7113d45..8ffe9f0 100644 --- a/modules/codec/tests/codec.cpp +++ b/modules/codec/tests/codec.cpp @@ -50,7 +50,7 @@ using TestInterface = Interface< SAW_TEST("One Dimensional Array") { using namespace saw; - data<schema::OneDimArray, encode::Native> arr{500u}; + data<schema::OneDimArray, encode::Native<rmt::Host>> arr{500u}; int bar = 0; @@ -69,7 +69,7 @@ SAW_TEST("One Dimensional Array") { SAW_TEST("One dim Array Default init"){ using namespace saw; - data<schema::OneDimArray, encode::Native> arr; + data<schema::OneDimArray, encode::Native<rmt::Host>> arr; SAW_EXPECT(arr.get_dim_size(0) == 0, "Dim should be size 0"); SAW_EXPECT(arr.size() == 0, "Total size should also be zero"); @@ -78,7 +78,7 @@ SAW_TEST("One dim Array Default init"){ SAW_TEST("One dimensional Array Add"){ using namespace saw; - data<schema::OneDimArray, encode::Native> arr{5u}; + data<schema::OneDimArray, encode::Native<rmt::Host>> arr{5u}; int bar = 0; @@ -95,7 +95,7 @@ SAW_TEST("One dimensional Array Add"){ SAW_TEST("Two Dimensional Array") { using namespace saw; - data<schema::TwoDimArray, encode::Native> arr{10,30u}; + data<schema::TwoDimArray, encode::Native<rmt::Host>> arr{10,30u}; int expected_sum = (300 * 301) / 2; @@ -119,7 +119,7 @@ SAW_TEST("Two Dimensional Array") { SAW_TEST("Three Dimensional Array") { using namespace saw; - data<schema::ThreeDimArray, encode::Native> arr{10,10u,3}; + data<schema::ThreeDimArray, encode::Native<rmt::Host>> arr{10,10u,3}; int expected_sum = (300 * 301) / 2; int bar = 0; @@ -145,7 +145,7 @@ SAW_TEST("Three Dimensional Array") { SAW_TEST("KelSimple UInt16 write"){ using namespace saw; - data<schema::UInt16, encode::Native> native; + data<schema::UInt16, encode::Native<rmt::Host>> native; data<schema::UInt16, encode::KelSimple> simple; codec<schema::UInt16, encode::KelSimple> codec; @@ -168,7 +168,7 @@ SAW_TEST("KelSimple UInt16 write"){ SAW_TEST("KelSimple UInt32 write"){ using namespace saw; - data<schema::UInt32, encode::Native> native; + data<schema::UInt32, encode::Native<rmt::Host>> native; data<schema::UInt32, encode::KelSimple> simple; codec<schema::UInt32, encode::KelSimple> codec; @@ -191,7 +191,7 @@ SAW_TEST("KelSimple UInt32 write"){ SAW_TEST("KelSimple Array write and read back"){ using namespace saw; - data<schema::TwoDimArray, encode::Native> native{2,3}; + data<schema::TwoDimArray, encode::Native<rmt::Host>> native{2,3}; data<schema::TwoDimArray, encode::KelSimple> simple; codec<schema::TwoDimArray, encode::KelSimple> codec; @@ -224,7 +224,7 @@ SAW_TEST("KelSimple Array write and read back"){ SAW_TEST("KelSimple Struct write and read back"){ using namespace saw; - data<schema::TestStruct,encode::Native> native; + data<schema::TestStruct,encode::Native<rmt::Host>> native; data<schema::TestStruct,encode::KelSimple> simple; auto& tda = native.template get<"two_dim_array">(); @@ -255,7 +255,7 @@ SAW_TEST("KelSimple Struct write and read back"){ SAW_TEST("Native Union same type compilation"){ using namespace saw; - data<schema::TestSameTypeUnion, encode::Native> native; + data<schema::TestSameTypeUnion, encode::Native<rmt::Host>> native; native.template init<"two">().set(50u); @@ -268,10 +268,10 @@ SAW_TEST("Native Union same type compilation"){ SAW_TEST("KelSimple Union write and read back"){ using namespace saw; - data<schema::TestUnion,encode::Native> native; + data<schema::TestUnion,encode::Native<rmt::Host>> native; data<schema::TestUnion,encode::KelSimple> simple; - native.template set<"number">(data<schema::UInt64, encode::Native>{}); + native.template set<"number">(data<schema::UInt64, encode::Native<rmt::Host>>{}); native.template get<"number">().set(410); codec<schema::TestUnion, encode::KelSimple> codec; @@ -292,7 +292,7 @@ SAW_TEST("KelSimple Union write and read back"){ SAW_TEST("KelSimple Tuple write and read back"){ using namespace saw; - data<schema::TestTuple,encode::Native> native; + data<schema::TestTuple,encode::Native<rmt::Host>> native; data<schema::TestTuple,encode::KelSimple> simple; auto& tda = native.template get<0>(); @@ -323,7 +323,7 @@ SAW_TEST("KelSimple Tuple write and read back"){ SAW_TEST("KelSimple String write and read back"){ using namespace saw; - data<schema::String,encode::Native> native; + data<schema::String,encode::Native<rmt::Host>> native; data<schema::String,encode::KelSimple> simple; std::string str = "FooBananaJoe"; @@ -348,14 +348,14 @@ SAW_TEST("Function basics"){ using namespace saw; { - data<schema::TestInt32Pair, encode::Native> native; + data<schema::TestInt32Pair, encode::Native<rmt::Host>> native; native.get<0>().set(5); native.get<1>().set(40); - auto func_add = function_factory<schema::TestCalcFunction, encode::Native>::create( - [](data<schema::TestInt32Pair, encode::Native> req){ - data<schema::Int32, encode::Native> resp; + auto func_add = function_factory<schema::TestCalcFunction, encode::Native<rmt::Host>>::create( + [](data<schema::TestInt32Pair, encode::Native<rmt::Host>> req){ + data<schema::Int32, encode::Native<rmt::Host>> resp; resp.set(req.get<0>().get() + req.get<1>().get()); @@ -374,36 +374,36 @@ SAW_TEST("Function basics"){ SAW_TEST("Interface basics"){ using namespace saw; - data<schema::TestInt32Pair, encode::Native> native; + data<schema::TestInt32Pair, encode::Native<rmt::Host>> native; auto func_add = - [](data<schema::TestInt32Pair, encode::Native> req){ - data<schema::Int32, encode::Native> resp; + [](data<schema::TestInt32Pair, encode::Native<rmt::Host>> req){ + data<schema::Int32, encode::Native<rmt::Host>> resp; resp.set(req.get<0>().get() + req.get<1>().get()); return resp; }; auto func_sub = - [](data<schema::TestInt32Pair, encode::Native> req){ - data<schema::Int32, encode::Native> resp; + [](data<schema::TestInt32Pair, encode::Native<rmt::Host>> req){ + data<schema::Int32, encode::Native<rmt::Host>> resp; resp.set(req.get<0>().get() - req.get<1>().get()); return resp; }; - auto func_multiply = [](data<schema::TestInt32Pair, encode::Native> req){ - data<schema::Int32, encode::Native> resp; + auto func_multiply = [](data<schema::TestInt32Pair, encode::Native<rmt::Host>> req){ + data<schema::Int32, encode::Native<rmt::Host>> resp; resp.set(req.get<0>().get() * req.get<1>().get()); return resp; }; - auto iface = interface_factory<schema::TestInterface, encode::Native>::create(std::move(func_add), std::move(func_sub), std::move(func_multiply)); + auto iface = interface_factory<schema::TestInterface, encode::Native<rmt::Host>>::create(std::move(func_add), std::move(func_sub), std::move(func_multiply)); { - data<schema::TestInt32Pair, encode::Native> native; + data<schema::TestInt32Pair, encode::Native<rmt::Host>> native; native.get<0>().set(5); native.get<1>().set(40); @@ -414,7 +414,7 @@ SAW_TEST("Interface basics"){ SAW_EXPECT(val.get() == 45, "Sum is incorrect"); } { - data<schema::TestInt32Pair, encode::Native> native; + data<schema::TestInt32Pair, encode::Native<rmt::Host>> native; native.get<0>().set(5); native.get<1>().set(40); @@ -425,7 +425,7 @@ SAW_TEST("Interface basics"){ SAW_EXPECT(val.get() == -35, "Sum is incorrect"); } { - data<schema::TestInt32Pair, encode::Native> native; + data<schema::TestInt32Pair, encode::Native<rmt::Host>> native; native.get<0>().set(5); native.get<1>().set(40); diff --git a/modules/codec/tests/csv.cpp b/modules/codec/tests/csv.cpp index ac394ce..6e9b124 100644 --- a/modules/codec/tests/csv.cpp +++ b/modules/codec/tests/csv.cpp @@ -22,7 +22,7 @@ SAW_TEST("Codec Csv Encode Basic"){ using namespace saw; size_t n_size = 3; - data <TestArray, encode::Native> native_data{n_size}; + data <TestArray, encode::Native<rmt::Host>> native_data{n_size}; { auto& row = native_data.at(0); row.template get<"string">().set("foo"); |