1#ifndef RITSUKO_HDF5_ITERATE_CHUNKS_HPP
2#define RITSUKO_HDF5_ITERATE_CHUNKS_HPP
10#include "../utils.hpp"
39 my_starts(my_data_extent.size()),
40 my_counts(my_data_extent.size())
42 const auto ndims = my_data_extent.size();
43 assert(ndims == my_chunk_extent.size());
45 I<
decltype(ndims)> num_empty = 0;
46 for (I<
decltype(ndims)> d = 0; d < ndims; ++d) {
47 my_chunk_extent[d] = std::min(my_data_extent[d], my_chunk_extent[d]);
48 my_counts[d] = my_chunk_extent[d];
49 num_empty += (my_chunk_extent[d] == 0);
52 if (ndims == 0 || num_empty) {
73 const auto ndims = my_data_extent.size();
74 for (
auto i = ndims; i > 0; --i) {
76 my_starts[d] += my_counts[d];
77 if (my_starts[d] < my_data_extent[d]) {
78 my_counts[d] = std::min(my_data_extent[d] - my_starts[d], my_chunk_extent[d]);
83 my_counts[d] = my_chunk_extent[d];
96 const std::vector<hsize_t>&
starts ()
const {
107 const std::vector<hsize_t>&
counts ()
const {
115 return my_data_extent;
124 return my_chunk_extent;
128 std::vector<hsize_t> my_data_extent, my_chunk_extent;
129 std::vector<hsize_t> my_starts, my_counts;
130 bool my_finished =
false;
136inline std::string emit_coordinates_as_string(hsize_t position, hsize_t chunk_size,
const std::vector<hsize_t>& starts,
const std::vector<hsize_t>& counts) {
138 const auto ndim = starts.size();
139 for (I<
decltype(ndim)> d = 0; d < ndim; ++d) {
143 chunk_size /= counts[d];
144 msg +=
itoa(starts[d] + position / chunk_size);
145 position %= chunk_size;
147 return "(" + msg +
")";
Convert an integer to a string.
Helper functions for ArtifactDB parsing and validation.
Definition Pointer.hpp:22
void itoa(Integer_ x, std::string &output)
Definition itoa.hpp:26
Iterate through an high-dimensional dataspace by chunk.
Definition IterateChunks.hpp:29
const std::vector< hsize_t > & chunk_dimensions() const
Definition IterateChunks.hpp:123
const std::vector< hsize_t > & data_dimensions() const
Definition IterateChunks.hpp:114
bool advance()
Definition IterateChunks.hpp:67
const std::vector< hsize_t > & starts() const
Definition IterateChunks.hpp:96
const std::vector< hsize_t > & counts() const
Definition IterateChunks.hpp:107
IterateChunks(std::vector< hsize_t > data_dimensions, std::vector< hsize_t > chunk_dimensions)
Definition IterateChunks.hpp:36