26inline std::vector<hsize_t>
pick_nd_block_dimensions(
const H5::DSetCreatPropList& cplist,
const std::vector<hsize_t>& dimensions, hsize_t buffer_size = 10000) {
27 size_t ndims = dimensions.size();
28 std::vector<hsize_t> chunk_extent(ndims, 1);
29 if (cplist.getLayout() == H5D_CHUNKED) {
30 cplist.getChunk(chunk_extent.size(), chunk_extent.data());
37 auto block_extent = chunk_extent;
38 hsize_t block_size = 1;
39 for (hsize_t d = 0; d < ndims; ++d) {
40 block_extent[d] = std::min(block_extent[d], dimensions[d]);
41 block_size *= block_extent[d];
45 for (hsize_t i = ndims; i > 0; --i) {
46 int multiple = buffer_size / block_size;
51 block_size /= block_extent[d];
52 block_extent[d] = std::min(dimensions[d], block_extent[d] * multiple);
53 block_size *= block_extent[d];
56 std::fill(block_extent.begin(), block_extent.end(), 0);
std::vector< hsize_t > pick_nd_block_dimensions(const H5::DSetCreatPropList &cplist, const std::vector< hsize_t > &dimensions, hsize_t buffer_size=10000)
Definition pick_nd_block_dimensions.hpp:26