diff options
Diffstat (limited to 'modules/codec/c++/csv.hpp')
-rw-r--r-- | modules/codec/c++/csv.hpp | 30 |
1 files changed, 22 insertions, 8 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; } }; } |