summaryrefslogtreecommitdiff
path: root/modules/codec
diff options
context:
space:
mode:
Diffstat (limited to 'modules/codec')
-rw-r--r--modules/codec/c++/csv.h3
-rw-r--r--modules/codec/c++/data.h17
-rw-r--r--modules/codec/tests/csv.cpp28
3 files changed, 40 insertions, 8 deletions
diff --git a/modules/codec/c++/csv.h b/modules/codec/c++/csv.h
index 7a3a18e..d35bb2d 100644
--- a/modules/codec/c++/csv.h
+++ b/modules/codec/c++/csv.h
@@ -118,7 +118,7 @@ struct csv_encode<schema::Struct<schema::Member<V,K>...>, FromDecode> {
return eov;
}
}
- return encode_header(to);
+ return encode_i<i+1>(from, to);
}
{
/**
@@ -162,7 +162,6 @@ struct csv_encode<schema::Primitive<T,N>, FromDecode> {
static error_or<void> encode(const data<Schema, FromDecode>& from, buffer& to){
std::string to_str;
-
try {
to_str = std::to_string(from.get());
}catch(const std::exception& ){
diff --git a/modules/codec/c++/data.h b/modules/codec/c++/data.h
index 2dffdbe..eb24841 100644
--- a/modules/codec/c++/data.h
+++ b/modules/codec/c++/data.h
@@ -383,6 +383,7 @@ private:
typename native_data_type<schema::Primitive<T,N>>::type value_;
public:
data():value_{}{}
+
SAW_DEFAULT_COPY(data);
SAW_DEFAULT_MOVE(data);
@@ -394,6 +395,22 @@ public:
}
typename native_data_type<schema::Primitive<T,N>>::type get() const {return value_;}
+
+ data<schema::Primitive<T,N>, encode::Native> operator*(const saw::data<schema::Primitive<T,N>, encode::Native>& rhs)const{
+ return {get() * rhs.get()};
+ }
+
+ data<schema::Primitive<T,N>, encode::Native> operator/(const saw::data<schema::Primitive<T,N>, encode::Native>& rhs)const{
+ return {get() / rhs.get()};
+ }
+
+ data<schema::Primitive<T,N>, encode::Native> operator+(const saw::data<schema::Primitive<T,N>, encode::Native>& rhs)const{
+ return {get() + rhs.get()};
+ }
+
+ data<schema::Primitive<T,N>, encode::Native> operator-(const saw::data<schema::Primitive<T,N>, encode::Native>& rhs)const{
+ return {get() - rhs.get()};
+ }
};
diff --git a/modules/codec/tests/csv.cpp b/modules/codec/tests/csv.cpp
index cbdc129..6d5549a 100644
--- a/modules/codec/tests/csv.cpp
+++ b/modules/codec/tests/csv.cpp
@@ -10,7 +10,8 @@ using namespace saw::schema;
using TestStruct = Struct<
Member<String, "string">,
- Member<UInt64, "number">
+ Member<UInt64, "number">,
+ Member<Int8, "signed">
>;
using TestArray = Array<
@@ -20,11 +21,26 @@ using TestArray = Array<
SAW_TEST("Codec Csv Encode Basic"){
using namespace saw;
- data <TestArray, encode::Native> native_data{1};
- auto& row = native_data.at(0);
-
- row.template get<"string">().set("foo");
- row.template get<"number">().set(140u);
+ size_t n_size = 3;
+ data <TestArray, encode::Native> native_data{n_size};
+ {
+ auto& row = native_data.at(0);
+ row.template get<"string">().set("foo");
+ row.template get<"number">().set(140u);
+ row.template get<"signed">().set(1);
+ }
+ {
+ auto& row = native_data.at(1);
+ row.template get<"string">().set("bar");
+ row.template get<"number">().set(245u);
+ row.template get<"signed">().set(2);
+ }
+ {
+ auto& row = native_data.at(2);
+ row.template get<"string">().set("ban and anna");
+ row.template get<"number">().set(42u);
+ row.template get<"signed">().set(3);
+ }
data <TestArray, encode::Csv> csv_data;
codec<TestArray, encode::Csv> csv_codec;