summaryrefslogtreecommitdiff
path: root/modules/codec/c++/data.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/codec/c++/data.hpp')
-rw-r--r--modules/codec/c++/data.hpp32
1 files changed, 23 insertions, 9 deletions
diff --git a/modules/codec/c++/data.hpp b/modules/codec/c++/data.hpp
index 4b34bfa..61bc9ea 100644
--- a/modules/codec/c++/data.hpp
+++ b/modules/codec/c++/data.hpp
@@ -318,17 +318,27 @@ private:
public:
constexpr data() = default;
- constexpr data(data<MetaSchema, encode::Native>){}
+ constexpr data(data<MetaSchema, encode::Native>){
+ }
+
constexpr data(const std::array<data<T, encode::Native>, ct_multiply<uint64_t,D...>::value>& value__):
value_{value__}
- {}
+ {
+ }
+
+ SAW_DEFAULT_COPY(data);
+ SAW_DEFAULT_MOVE(data);
+ template<size_t dim_i = 0>
constexpr data<T, encode::Native>& at(data<schema::UInt64, encode::Native> i) {
- return value_.at(this->get_flat_index({{i}}));
+ static_assert(sizeof...(D) == 1u);
+ return value_.at(i.get());
}
+ template<size_t dim_i = 0>
constexpr const data<T, encode::Native>& at(data<schema::UInt64, encode::Native> i) const {
- return value_.at(this->get_flat_index({{i}}));
+ static_assert(sizeof...(D) == 1u);
+ return value_.at(i.get());
}
constexpr data<T, encode::Native>& at(const data<schema::FixedArray<schema::UInt64, sizeof...(D)>>& i){
@@ -356,8 +366,8 @@ private:
constexpr static std::array<uint64_t, sizeof...(D)> dims_{D...};
for(uint64_t iter = 0; iter < sizeof...(D); ++iter){
- assert(i.at({iter}).get() < dims_.at(iter));
- s += i.at({iter}).get() * stride;
+ assert(i.at(data<schema::UInt64>{iter}).get() < dims_.at(iter));
+ s += i.at(data<schema::UInt64>{iter}).get() * stride;
stride *= dims_.at(iter);
}
@@ -628,7 +638,10 @@ class data<schema::Array<T,Dim>, encode::Native> {
uint64_t s = 1;
for(uint64_t iter = 0; iter < Dim; ++iter){
- s *= dims_.at({iter}).get();
+
+ auto& dim_iter = dims_.at(data<schema::UInt64>{iter});
+
+ s *= dim_iter.get();
}
return s;
@@ -649,7 +662,8 @@ class data<schema::Array<T,Dim>, encode::Native> {
dims_{init__},
value_{}
{
- value_.resize(get_full_size());
+ uint64_t f_s = get_full_size();
+ value_.resize(f_s);
}
template<size_t i = 0>
@@ -693,7 +707,7 @@ class data<schema::Array<T,Dim>, encode::Native> {
i_arr.at(0u) = i;
return at(i_arr);
}
-
+
const data<T, encode::Native>& at(data<schema::UInt64, encode::Native> i) const {
data<schema::FixedArray<schema::UInt64,Dim>, encode::Native> i_arr;
i_arr.at(0u) = i;