From 5c65123b44cd8e9761ff8c812b141a496a649019 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Fri, 11 Apr 2025 12:54:00 +0200 Subject: Moving towards more forstio data types --- modules/codec-json/c++/json.tmpl.hpp | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) (limited to 'modules/codec-json/c++/json.tmpl.hpp') diff --git a/modules/codec-json/c++/json.tmpl.hpp b/modules/codec-json/c++/json.tmpl.hpp index 1eb46bc..e51d456 100644 --- a/modules/codec-json/c++/json.tmpl.hpp +++ b/modules/codec-json/c++/json.tmpl.hpp @@ -199,7 +199,7 @@ struct json_encode, FromEncode> { using Schema = schema::Array; template - static error_or encode_level(const data& from, buffer& to, std::array& index, uint64_t depth, bool pretty){ + static error_or encode_level(const data& from, buffer& to, data, FromEncode>& index, uint64_t depth, bool pretty){ if constexpr (Level == D){ if(pretty){ auto eov = json_helper::print_pretty_indent(to, depth); @@ -232,7 +232,7 @@ struct json_encode, FromEncode> { } } { - index[Level] = i; + index.at(Level) = i; auto eov = encode_level(from, to, index, depth+1u, pretty); if(eov.is_error()){ return eov; @@ -256,7 +256,7 @@ struct json_encode, FromEncode> { } static error_or encode(const data& from, buffer& to, uint64_t depth, bool pretty) { - std::array index; + data, FromEncode> index; return encode_level<0>(from, to, index, depth+1u, pretty); } }; @@ -289,7 +289,7 @@ struct json_encode, FromEncode> { } } { - index[Level] = i; + index.at(Level) = i; if constexpr (sizeof...(DimPack) > 0){ auto eov = encode_level(from, to, index, depth, pretty); if(eov.is_error()){ @@ -837,7 +837,7 @@ struct json_decode, ToDecode> { using Schema = schema::Array; template - static error_or decode_flat_level(buffer_view& buff, std::vector>& to, std::array& index, std::array& dims, bool log_dim){ + static error_or decode_flat_level(buffer_view& buff, std::vector>& to, data, ToDecode>& index, data, ToDecode>& dims, bool log_dim){ if constexpr (Level == D) { json_helper::skip_whitespace(buff); @@ -867,10 +867,10 @@ struct json_decode, ToDecode> { is_empty = true; } - index[Level] = 0; + index.at(Level) = 0; for(;!is_empty;){ // We should have an element right now - auto eov = decode_flat_level(buff,to,index,dims, index[Level] == 0 && log_dim); + auto eov = decode_flat_level(buff,to,index,dims, index.at(Level).get() == 0 && log_dim); if(eov.is_error()){ return eov; } @@ -879,7 +879,7 @@ struct json_decode, ToDecode> { return make_error(); } - ++index[Level]; + ++index.at(Level); if(buff.read() == ','){ buff.read_advance(1); } else if(buff.read() == ']'){ @@ -894,8 +894,8 @@ struct json_decode, ToDecode> { } } if(log_dim){ - dims[Level] = index[Level]; - }else if (dims[Level] != index[Level]){ + dims.at(Level) = index.at(Level); + }else if (dims.at(Level) != index.at(Level)){ return make_error("Not matching Array endings"); } } @@ -903,14 +903,14 @@ struct json_decode, ToDecode> { } template - static error_or decode_unflat_level(std::vector>& flat, data, ToDecode>& to, std::array& index, std::size_t& flat_index) { + static error_or decode_unflat_level(std::vector>& flat, data, ToDecode>& to, data, ToDecode>& index, std::size_t& flat_index) { if constexpr ( Level == D ){ - auto& flat_data = flat.at(flat_index); + auto& flat_data = flat.at({flat_index}); to.at(index) = std::move(flat_data); ++flat_index; }else { const std::size_t dim_size = to.get_dim_size(Level); - for(index[Level] = 0; index[Level] < dim_size; ++index[Level]){ + for(index.at(Level) = 0; index.at(Level).get() < dim_size; ++index.at(Level)){ auto eov = decode_unflat_level(flat, to, index, flat_index); if(eov.is_error()){ @@ -922,9 +922,8 @@ struct json_decode, ToDecode> { } static error_or decode(buffer_view& buff, data& to){ - std::array index; - std::array dims; - std::fill(dims.begin(), dims.end(), 0); + data, ToDecode> index; + data, ToDecode> dims; std::vector> flat_array; auto eov = decode_flat_level<0>(buff, flat_array, index, dims, true); if(eov.is_error()){ -- cgit v1.2.3