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