1#ifndef RITSUKO_HDF5_ITERATE_CHUNKS_HPP
2#define RITSUKO_HDF5_ITERATE_CHUNKS_HPP
10#include "../utils.hpp"
38 my_starts(my_data_extent.size()),
39 my_counts(my_data_extent.size())
41 const auto ndims = my_data_extent.size();
42 assert(ndims == my_chunk_extent.size());
44 I<
decltype(ndims)> num_empty = 0;
45 for (I<
decltype(ndims)> d = 0; d < ndims; ++d) {
46 my_chunk_extent[d] = std::min(my_data_extent[d], my_chunk_extent[d]);
47 my_counts[d] = my_chunk_extent[d];
48 num_empty += (my_chunk_extent[d] == 0);
51 if (ndims == 0 || num_empty) {
72 const auto ndims = my_data_extent.size();
73 for (
auto i = ndims; i > 0; --i) {
75 my_starts[d] += my_counts[d];
76 if (my_starts[d] < my_data_extent[d]) {
77 my_counts[d] = std::min(my_data_extent[d] - my_starts[d], my_chunk_extent[d]);
82 my_counts[d] = my_chunk_extent[d];
95 const std::vector<hsize_t>&
starts ()
const {
106 const std::vector<hsize_t>&
counts ()
const {
114 return my_data_extent;
123 return my_chunk_extent;
127 std::vector<hsize_t> my_data_extent, my_chunk_extent;
128 std::vector<hsize_t> my_starts, my_counts;
129 bool my_finished =
false;
Helper functions for ArtifactDB parsing and validation.
Definition Pointer.hpp:21
Iterate through an high-dimensional dataspace by chunk.
Definition IterateChunks.hpp:28
const std::vector< hsize_t > & chunk_dimensions() const
Definition IterateChunks.hpp:122
const std::vector< hsize_t > & data_dimensions() const
Definition IterateChunks.hpp:113
bool advance()
Definition IterateChunks.hpp:66
const std::vector< hsize_t > & starts() const
Definition IterateChunks.hpp:95
const std::vector< hsize_t > & counts() const
Definition IterateChunks.hpp:106
IterateChunks(std::vector< hsize_t > data_dimensions, std::vector< hsize_t > chunk_dimensions)
Definition IterateChunks.hpp:35