17#include "../H5PropertyList.hpp"
28 explicit ElementSet(std::initializer_list<std::size_t> list);
33 explicit ElementSet(std::initializer_list<std::vector<std::size_t>> list);
39 explicit ElementSet(
const std::vector<std::size_t>& element_ids);
44 explicit ElementSet(
const std::vector<std::vector<std::size_t>>& element_ids);
47 std::vector<std::size_t> _ids;
49 template <
typename Derivate>
55template <
class To,
class From>
56inline std::vector<To> convertSizeVector(
const std::vector<From>& from) {
57 std::vector<To> to(from.size());
58 std::copy(from.cbegin(), from.cend(), to.begin());
65 return detail::convertSizeVector<hsize_t>(from);
69 return detail::convertSizeVector<size_t>(from);
76 std::vector<size_t> count_ = {},
77 std::vector<size_t> stride_ = {},
78 std::vector<size_t> block_ = {})
85 std::vector<hsize_t> count_ = {},
86 std::vector<hsize_t> stride_ = {},
87 std::vector<hsize_t> block_ = {}) {
89 slab.offset = offset_;
91 slab.stride = stride_;
98 return std::max(std::max(
offset.size(),
count.size()),
104 auto n_dims =
rank();
105 auto dims = std::vector<size_t>(n_dims, 0);
107 for (
size_t i = 0; i < n_dims; ++i) {
127 selects.emplace_back(sel, Op::Set);
137 selects.emplace_back(sel, Op::Or);
148 selects.emplace_back(sel, Op::And);
159 selects.emplace_back(sel, Op::Xor);
164 selects.emplace_back(sel, Op::NotA);
169 selects.emplace_back(sel, Op::NotB);
174 auto space = space_.
clone();
175 for (
const auto& sel: selects) {
176 if (sel.op == Op::None) {
177 H5Sselect_none(space.getId());
180 H5Sselect_hyperslab(space.getId(),
182 sel.offset.empty() ?
nullptr : sel.offset.data(),
183 sel.stride.empty() ? nullptr : sel.stride.data(),
184 sel.count.empty() ? nullptr : sel.count.data(),
185 sel.block.empty() ? nullptr : sel.block.data());
187 if (error_code < 0) {
188 HDF5ErrMapper::ToException<DataSpaceException>(
"Unable to select hyperslab");
210 H5S_seloper_t convert(Op op)
const {
213 return H5S_SELECT_NOOP;
215 return H5S_SELECT_SET;
217 return H5S_SELECT_OR;
219 return H5S_SELECT_AND;
221 return H5S_SELECT_XOR;
223 return H5S_SELECT_NOTB;
225 return H5S_SELECT_NOTA;
227 return H5S_SELECT_APPEND;
229 return H5S_SELECT_PREPEND;
231 return H5S_SELECT_INVALID;
233 throw DataSpaceException(
"Invalid HyperSlab operation.");
237 struct Select_:
public RegularHyperSlab {
245 std::vector<Select_> selects;
248template <
typename Derivate>
269 const std::vector<size_t>& count,
270 const std::vector<size_t>& stride = {},
271 const std::vector<size_t>& block = {})
const;
285 template <
typename T>
297 template <
typename T>
309 template <
typename T>
321 template <
typename T>
334 template <
typename T>
Class representing the space (dimensions) of a dataset.
Definition H5DataSpace.hpp:25
DataSpace clone() const
Definition H5Dataspace_misc.hpp:85
HDF5 Data Type.
Definition H5DataType.hpp:54
Definition H5Slice_traits.hpp:21
Definition H5Slice_traits.hpp:120
HyperSlab & notA(const RegularHyperSlab &sel)
Definition H5Slice_traits.hpp:163
HyperSlab & notB(const RegularHyperSlab &sel)
Definition H5Slice_traits.hpp:168
HyperSlab operator&(const RegularHyperSlab &sel) const
Definition H5Slice_traits.hpp:141
HyperSlab operator^(const RegularHyperSlab &sel) const
Definition H5Slice_traits.hpp:152
HyperSlab operator|(const RegularHyperSlab &sel) const
Definition H5Slice_traits.hpp:130
HyperSlab & operator&=(const RegularHyperSlab &sel)
Definition H5Slice_traits.hpp:147
HyperSlab()
Definition H5Slice_traits.hpp:122
HyperSlab & operator^=(const RegularHyperSlab &sel)
Definition H5Slice_traits.hpp:158
HyperSlab(const RegularHyperSlab &sel)
Definition H5Slice_traits.hpp:126
HyperSlab & operator|=(const RegularHyperSlab &sel)
Definition H5Slice_traits.hpp:136
DataSpace apply(const DataSpace &space_) const
Definition H5Slice_traits.hpp:173
HDF5 property Lists.
Definition H5PropertyList.hpp:79
Selection: represent a view on a slice/part of a dataset.
Definition H5Selection.hpp:27
Definition H5Slice_traits.hpp:249
T read(const DataTransferProps &xfer_props=DataTransferProps()) const
Definition H5Slice_traits_misc.hpp:162
void write(const T &buffer, const DataTransferProps &xfer_props=DataTransferProps())
Definition H5Slice_traits_misc.hpp:241
void write_raw(const T *buffer, const DataType &dtype=DataType(), const DataTransferProps &xfer_props=DataTransferProps())
Definition H5Slice_traits_misc.hpp:268
Selection select(const HyperSlab &hyperslab) const
Select an hyperslab in the current Slice/Dataset.
Definition H5Slice_traits_misc.hpp:82
Selection select_impl(const HyperSlab &hyperslab, const DataSpace &memspace) const
Definition H5Slice_traits_misc.hpp:67
Definition H5_definitions.hpp:15
PropertyList< PropertyType::DATASET_XFER > DataTransferProps
Definition H5PropertyList.hpp:110
std::vector< size_t > toSTLSizeVector(const std::vector< hsize_t > &from)
Definition H5Slice_traits.hpp:68
std::vector< hsize_t > toHDF5SizeVector(const std::vector< size_t > &from)
Definition H5Slice_traits.hpp:64
Definition H5Slice_traits.hpp:72
size_t rank() const
Definition H5Slice_traits.hpp:97
std::vector< hsize_t > offset
Definition H5Slice_traits.hpp:114
std::vector< hsize_t > block
Definition H5Slice_traits.hpp:117
std::vector< size_t > packedDims() const
Dimensions when all gaps are removed.
Definition H5Slice_traits.hpp:103
RegularHyperSlab(std::vector< size_t > offset_, std::vector< size_t > count_={}, std::vector< size_t > stride_={}, std::vector< size_t > block_={})
Definition H5Slice_traits.hpp:75
RegularHyperSlab()=default
std::vector< hsize_t > count
Definition H5Slice_traits.hpp:115
static RegularHyperSlab fromHDF5Sizes(std::vector< hsize_t > offset_, std::vector< hsize_t > count_={}, std::vector< hsize_t > stride_={}, std::vector< hsize_t > block_={})
Definition H5Slice_traits.hpp:84
std::vector< hsize_t > stride
Definition H5Slice_traits.hpp:116