From 4260ffa31e58129ad6822eccce8a81ab750bd8b7 Mon Sep 17 00:00:00 2001 From: Claudius Holeksa Date: Thu, 15 Jun 2023 15:16:00 +0200 Subject: c++,codec: Adding missing dependency for tests and minor change to unsigned arg --- src/codec/data.h | 56 ++++++++++++++++++++++++++++++++++++++++++++++------ tests/codec-json.cpp | 2 +- 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/src/codec/data.h b/src/codec/data.h index 5e6fd25..7ed672b 100644 --- a/src/codec/data.h +++ b/src/codec/data.h @@ -3,6 +3,11 @@ #include #include +#include + +#include +#include +#include #include #include "schema.h" @@ -159,22 +164,61 @@ public: template class data, encode::Native> { private: + std::array dims_; std::vector> value_; + + std::size_t get_full_size() const { + std::size_t s = 1; + + for(std::size_t iter = 0; iter < Dim; ++iter){ + assert(dims_.at(iter) > 0); + s *= dims_.at(iter); + } + + return s; + } + + std::size_t get_index(const std::array& i) const { + std::size_t s = 0; + + std::size_t stride = 1; + + for(std::size_t iter = 0; iter < Dim; ++iter){ + s += i.at(iter) * stride; + stride *= dims_.at(iter); + } + + return s; + } public: data() = default; SAW_DEFAULT_COPY(data); SAW_DEFAULT_MOVE(data); - data(size_t size_){ - value_.resize(size_); + template + data(Dims... size_): + dims_{size_...}, + value_{} + { + for(auto& iter : dims_){ + assert(iter > 0); + } + static_assert(sizeof...(Dims)==Dim, "Argument size must be equal to the Dimension"); + value_.resize(get_full_size()); } - data& at(size_t i){ - return value_.at(i); + template + data& at(Dims... i){ + return value_.at(this->get_index({i...})); + } + + template + const data& at(Dims... i) const { + return value_.at(this->get_index({i...})); } - const data& at(size_t i) const { - return value_.at(i); + std::size_t get_dim_size(std::size_t i) const { + return dims_.at(i); } size_t size() const { return value_.size();} diff --git a/tests/codec-json.cpp b/tests/codec-json.cpp index 9cbb7c3..1b6c5d2 100644 --- a/tests/codec-json.cpp +++ b/tests/codec-json.cpp @@ -86,7 +86,7 @@ SAW_TEST("Tuple write"){ SAW_TEST("Array write"){ using namespace saw; - data native{3}; + data native{3u}; data json; native.at(0).set("foo"); -- cgit v1.2.3