9#ifndef H5DATASPACE_MISC_HPP
10#define H5DATASPACE_MISC_HPP
13#include <initializer_list>
23inline DataSpace::DataSpace(
const std::vector<size_t>& dims)
27inline DataSpace::DataSpace(
const std::array<size_t, N>& dims)
30inline DataSpace::DataSpace(
const std::initializer_list<size_t>& items)
31 :
DataSpace(std::vector<size_t>(items)) {}
33template<
typename... Args>
34inline DataSpace::DataSpace(
size_t dim1, Args... dims)
35 :
DataSpace(std::vector<size_t>{dim1,
static_cast<size_t>(dims)...}) {}
37template <
class IT,
typename>
38inline DataSpace::DataSpace(
const IT begin,
const IT end) {
39 std::vector<hsize_t> real_dims(begin, end);
41 if ((_hid = H5Screate_simple(
int(real_dims.size()), real_dims.data(),
47inline DataSpace::DataSpace(
const std::vector<size_t>& dims,
48 const std::vector<size_t>& maxdims) {
50 if (dims.size() != maxdims.size()) {
54 std::vector<hsize_t> real_dims(dims.begin(), dims.end());
55 std::vector<hsize_t> real_maxdims(maxdims.begin(), maxdims.end());
58 std::replace(real_maxdims.begin(), real_maxdims.end(),
59 static_cast<hsize_t
>(DataSpace::UNLIMITED), H5S_UNLIMITED);
61 if ((_hid = H5Screate_simple(
int(dims.size()), real_dims.data(),
62 real_maxdims.data())) < 0) {
68 H5S_class_t h5_dataspace_type;
70 case DataSpace::datascape_scalar:
71 h5_dataspace_type = H5S_SCALAR;
73 case DataSpace::datascape_null:
74 h5_dataspace_type = H5S_NULL;
78 "datascape_scalar or datascape_null");
81 if ((_hid = H5Screate(h5_dataspace_type)) < 0) {
88 if ((res._hid = H5Scopy(_hid)) < 0) {
95 const int ndim = H5Sget_simple_extent_ndims(_hid);
97 HDF5ErrMapper::ToException<DataSetException>(
98 "Unable to get dataspace number of dimensions");
106 if (H5Sget_simple_extent_dims(_hid, dims.data(), NULL) < 0) {
107 HDF5ErrMapper::ToException<DataSetException>(
108 "Unable to get dataspace dimensions");
111 return details::to_vector_size_t(std::move(dims));
116 return std::accumulate(dims.begin(), dims.end(),
size_t{1u},
117 std::multiplies<size_t>());
121 return H5Sget_select_npoints(_hid);
126 if (H5Sget_simple_extent_dims(_hid, NULL, maxdims.data()) < 0) {
127 HDF5ErrMapper::ToException<DataSetException>(
128 "Unable to get dataspace dimensions");
131 std::replace(maxdims.begin(), maxdims.end(), H5S_UNLIMITED,
132 static_cast<hsize_t
>(DataSpace::UNLIMITED));
133 return details::to_vector_size_t(maxdims);
142template <std::
size_t N, std::
size_t W
idth>
143inline DataSpace DataSpace::FromCharArrayStrings(
const char(&)[N][Width]) {
150inline bool checkDimensions(
const DataSpace& mem_space,
size_t input_dims) {
151 size_t dataset_dims = mem_space.getNumberDimensions();
152 if (input_dims == dataset_dims)
155 const std::vector<size_t>& dims = mem_space.getDimensions();
156 for (
auto i = dims.crbegin(); i != --dims.crend() && *i == 1; ++i)
159 if (input_dims == dataset_dims)
162 dataset_dims = dims.size();
163 for (
auto i = dims.cbegin(); i != --dims.cend() && *i == 1; ++i)
166 if (input_dims == dataset_dims)
170 return input_dims == 0 && dataset_dims == 1 && dims[dims.size() - 1] == 1;
Exception specific to h5gt DataSpace interface.
Definition H5Exception.hpp:99
Class representing the space (dimensions) of a dataset.
Definition H5DataSpace.hpp:37
size_t getElementCount() const
getElementCount
Definition H5Dataspace_misc.hpp:114
DataSpace clone() const
Definition H5Dataspace_misc.hpp:86
size_t getElementCountSelected() const
getElementCountSelected
Definition H5Dataspace_misc.hpp:120
static DataSpace From(const T &value)
Create a dataspace matching a type accepted by details::inspector.
Definition H5Dataspace_misc.hpp:137
DataspaceType
dataspace type
Definition H5DataSpace.hpp:45
size_t getNumberDimensions() const
getNumberDimensions
Definition H5Dataspace_misc.hpp:94
std::vector< size_t > getMaxDimensions() const
getMaxDimensions
Definition H5Dataspace_misc.hpp:124
std::vector< size_t > getDimensions() const
getDimensions
Definition H5Dataspace_misc.hpp:103
Definition H5Utils.hpp:49