diff options
Diffstat (limited to 'modules/codec-netcdf')
-rw-r--r-- | modules/codec-netcdf/c++/netcdf.tmpl.hpp | 14 | ||||
-rw-r--r-- | modules/codec-netcdf/tests/codec-netcdf.cpp | 2 |
2 files changed, 9 insertions, 7 deletions
diff --git a/modules/codec-netcdf/c++/netcdf.tmpl.hpp b/modules/codec-netcdf/c++/netcdf.tmpl.hpp index bf257e4..ba357a5 100644 --- a/modules/codec-netcdf/c++/netcdf.tmpl.hpp +++ b/modules/codec-netcdf/c++/netcdf.tmpl.hpp @@ -229,18 +229,18 @@ struct netcdf_decode<schema::Array<T,Dim>, ToDecode> { using Schema = schema::Array<T,Dim>; template<std::size_t Level> - static error_or<void> decode_level(data<Schema, ToDecode>& to, int from, int nc_varid, std::array<std::size_t, Dim>& index, const std::array<size_t,Dim>& count){ + static error_or<void> decode_level(data<Schema, ToDecode>& to, int from, int nc_varid, data<schema::FixedArray<schema::UInt64,Dim>, ToDecode>& index, const std::array<size_t,Dim>& count){ if constexpr ( Level == Dim ){ int rc{}; typename native_data_type<T>::type val; - rc = nc_get_vara(from, nc_varid, index.data(), count.data(), &val); + rc = nc_get_vara(from, nc_varid, convert_to_stl<schema::FixedArray<schema::UInt64,Dim>, ToDecode>{}(index).data(), count.data(), &val); if(rc != NC_NOERR){ return make_error<err::critical>(); } to.at(index).set(val); }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_level<Level+1>(to, from, nc_varid, index, count); if(eov.is_error()){ return eov; @@ -270,18 +270,20 @@ struct netcdf_decode<schema::Array<T,Dim>, ToDecode> { return make_error<err::critical>(); } - std::array<std::size_t, Dim> dims; + data<schema::FixedArray<schema::UInt64,Dim>, ToDecode> dims; std::array<size_t, Dim> count; for(std::size_t i = 0; i < Dim; ++i){ - rc = nc_inq_dim(from, nc_dimids[i], nullptr, &dims[i]); + uint64_t dim_i = dims.at({i}).get(); + rc = nc_inq_dim(from, nc_dimids[i], nullptr, &dim_i); if(rc != NC_NOERR){ return make_error<err::critical>(); } + dims.at(i).set(dim_i); count[i] = 1; } to = {dims}; - std::array<std::size_t, Dim> index; + data<schema::FixedArray<schema::UInt64,Dim>, ToDecode> index; return decode_level<0>(to, from, nc_varid, index, count); } diff --git a/modules/codec-netcdf/tests/codec-netcdf.cpp b/modules/codec-netcdf/tests/codec-netcdf.cpp index 540f60e..6595851 100644 --- a/modules/codec-netcdf/tests/codec-netcdf.cpp +++ b/modules/codec-netcdf/tests/codec-netcdf.cpp @@ -97,7 +97,7 @@ SAW_TEST("NetCDF Struct Array read"){ for(std::size_t i = 0; i < 5; ++i){ for(std::size_t j = 0; j < 3; ++j){ int64_t exp_val = i * 3 + j; - SAW_EXPECT(arr.at({i,j}).get() == exp_val, "Incorrect value"); + SAW_EXPECT(arr.at({{i,j}}).get() == exp_val, "Incorrect value"); } } } |