1#ifndef RITSUKO_ITERATE_ND_DATASET_HPP
2#define RITSUKO_ITERATE_ND_DATASET_HPP
32 data_extent(std::move(d)),
33 block_extent(std::move(b)),
34 ndims(data_extent.size()),
35 starts_internal(ndims),
36 counts_internal(block_extent),
37 dspace(ndims, data_extent.data())
39 for (
auto b : block_extent) {
44 dspace.selectHyperslab(H5S_SELECT_SET, counts_internal.data(), starts_internal.data());
45 mspace.setExtentSimple(ndims, counts_internal.data());
47 finished_internal =
true;
57 for (
size_t i = ndims; i > 0; --i) {
59 starts_internal[d] += block_extent[d];
62 if (starts_internal[d] < data_extent[d]) {
63 total_size /= counts_internal[d];
64 counts_internal[d] = std::min(data_extent[d] - starts_internal[d], block_extent[d]);
65 total_size *= counts_internal[d];
71 finished_internal =
true;
77 starts_internal[d] = 0;
78 total_size /= counts_internal[d];
79 counts_internal[d] = std::min(data_extent[d], block_extent[d]);
80 total_size *= counts_internal[d];
83 dspace.selectHyperslab(H5S_SELECT_SET, counts_internal.data(), starts_internal.data());
84 mspace.setExtentSimple(ndims, counts_internal.data());
93 return finished_internal;
108 const std::vector<hsize_t>&
starts ()
const {
109 return starts_internal;
117 const std::vector<hsize_t>&
counts ()
const {
118 return counts_internal;
151 std::vector<hsize_t> data_extent, block_extent;
154 std::vector<hsize_t> starts_internal, counts_internal;
155 H5::DataSpace mspace, dspace;
156 bool finished_internal =
false;
157 size_t total_size = 1;
Assorted helper functions for parsing and validation.
Definition choose_missing_placeholder.hpp:15
Iterate through an N-dimensional dataset by block.
Definition IterateNdDataset.hpp:25
IterateNdDataset(std::vector< hsize_t > d, std::vector< hsize_t > b)
Definition IterateNdDataset.hpp:31
const H5::DataSpace & memory_space() const
Definition IterateNdDataset.hpp:132
const std::vector< hsize_t > & counts() const
Definition IterateNdDataset.hpp:117
const std::vector< hsize_t > & starts() const
Definition IterateNdDataset.hpp:108
bool finished() const
Definition IterateNdDataset.hpp:92
const H5::DataSpace & file_space() const
Definition IterateNdDataset.hpp:124
const std::vector< hsize_t > & block_dimensions() const
Definition IterateNdDataset.hpp:146
size_t current_block_size() const
Definition IterateNdDataset.hpp:101
const std::vector< hsize_t > & dimensions() const
Definition IterateNdDataset.hpp:139
void next()
Definition IterateNdDataset.hpp:55