diff options
author | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-09-04 15:36:17 +0200 |
---|---|---|
committer | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-09-04 15:36:17 +0200 |
commit | 6549acd69973cee030c9c73e55470094221b212e (patch) | |
tree | 1336921ea98dae70fea51a9e869fe5ef3ff4a92c | |
parent | 5c6eb70c52a530d9d5779f97a4ce0d312851bd28 (diff) |
Preparing csv to work
-rw-r--r-- | modules/codec/c++/csv.hpp | 30 | ||||
-rw-r--r-- | modules/codec/tests/csv.cpp | 14 |
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; +} +*/ } } |