summaryrefslogtreecommitdiff
path: root/modules/codec
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2024-04-17 15:03:09 +0200
committerClaudius "keldu" Holeksa <mail@keldu.de>2024-04-17 15:03:09 +0200
commitc1572ff1c275145208333e3e69c29c569689e51b (patch)
tree8c063016008ceac98a926bda5487794f710e3eeb /modules/codec
parent1a2299a70280867b93fde4050833d4bd2b419884 (diff)
Moved to platform description in structs
Diffstat (limited to 'modules/codec')
-rw-r--r--modules/codec/SConstruct1
-rw-r--r--modules/codec/c++/data.hpp88
-rw-r--r--modules/codec/tests/codec.cpp58
-rw-r--r--modules/codec/tests/csv.cpp2
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");