summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/codec/c++/csv.hpp30
-rw-r--r--modules/codec/tests/csv.cpp14
2 files changed, 34 insertions, 10 deletions
diff --git a/modules/codec/c++/csv.hpp b/modules/codec/c++/csv.hpp
index 82010d7..240ed75 100644
--- a/modules/codec/c++/csv.hpp
+++ b/modules/codec/c++/csv.hpp
@@ -97,7 +97,7 @@ struct csv_encode<schema::Struct<schema::Member<V,K>...>, FromDecode> {
/**
* Replace this with row separator
*/
- constexpr std::string_view lit = "\r\n";
+ constexpr std::string_view lit = "\n";
for(int8_t iter : lit){
auto eov = stream_value<schema::Int8>::encode(iter, to);
if ( eov.is_error()){
@@ -110,7 +110,10 @@ struct csv_encode<schema::Struct<schema::Member<V,K>...>, FromDecode> {
}
static error_or<void> encode_header(buffer& to){
- return encode_header_i<0>(to);
+ if constexpr (sizeof...(V) > 0u){
+ return encode_header_i<0u>(to);
+ }
+ return make_void();
}
template<size_t i>
@@ -225,12 +228,18 @@ struct csv_decode<schema::Array<T,Dim>, FromDecode> {
template<typename Schema>
class data<Schema, encode::Csv> {
private:
- ring_buffer buffer_;
+ own<buffer> buffer_;
public:
- data() = default;
+ data():
+ buffer_{heap<ring_buffer>()}
+ {}
+
+ data(own<buffer> buffer__):
+ buffer_{std::move(buffer__)}
+ {}
buffer& get_buffer(){
- return buffer_;
+ return *buffer_;
}
};
@@ -253,10 +262,15 @@ public:
template<typename ToDecode>
static error_or<void> decode(data<Schema,encode::Csv>& from, data<Schema, ToDecode>& to){
- (void) to;
- (void) from;
+ auto& buff = from.get_buffer();
+ buffer_view buff_v{buff};
+ auto eov = impl::csv_decode<Schema, ToDecode>::decode(buff_v, to);
+ if(eov.is_error()){
+ return eov;
+ }
+ buff.write_advance(buff_v.write_offset());
- return make_error<err::not_implemented>();
+ return eov;
}
};
}
diff --git a/modules/codec/tests/csv.cpp b/modules/codec/tests/csv.cpp
index ac394ce..417a547 100644
--- a/modules/codec/tests/csv.cpp
+++ b/modules/codec/tests/csv.cpp
@@ -14,14 +14,18 @@ using TestStruct = Struct<
Member<Int8, "signed">
>;
+using TestTuple = Tuple<
+ String
+>;
+
using TestArray = Array<
TestStruct
>;
-SAW_TEST("Codec Csv Encode Basic"){
+SAW_TEST("Codec Csv/Encode Basic"){
using namespace saw;
- size_t n_size = 3;
+ size_t n_size = 3u;
data <TestArray, encode::Native> native_data{n_size};
{
auto& row = native_data.at(0);
@@ -48,5 +52,11 @@ SAW_TEST("Codec Csv Encode Basic"){
auto eov = csv_codec.encode(native_data, csv_data);
SAW_EXPECT(eov.is_value(), "Couldn't encode data");
}
+
+/*
+SAW_TEST("Codec Csv/Decode Basic"){
+ using namespace saw;
+}
+*/
}
}