1#if TATOOINE_HDF5_AVAILABLE
8#include <tatooine/hdf5/type.h>
9#include <tatooine/hdf5_include.h>
14#include <boost/range/algorithm/reverse.hpp>
15#include <boost/range/numeric.hpp>
34 static auto get() ->
auto& {
35 static auto obj =
api{};
41 get()._disable_error_printing();
46 H5Eset_auto(H5E_DEFAULT,
nullptr,
nullptr);
51 get()._enable_error_printing();
60 std::cerr <<
"An HDF5 error was detected. Bye.\n";
87 :
id_holder{cls_id == H5P_DEFAULT ? H5P_DEFAULT : H5Pcreate(cls_id)} {}
91 set_id(H5Pcopy(other.id()));
99 [[nodiscard]]
auto is_default()
const {
return id() == H5P_DEFAULT; }
111 auto dim = std::array{
static_cast<hsize_t
>(
size)...};
112 H5Pset_chunk(
id(),
sizeof...(
size), dim.data());
129 :
id_holder{H5Screate_simple(static_cast<int>(cur_resolution.
size()),
130 boost::reverse(cur_resolution).data(),
135 :
id_holder{H5Screate_simple(static_cast<int>(cur_resolution.
size()),
136 boost::reverse(cur_resolution).data(),
139 template <std::
size_t N>
140 explicit dataspace(std::array<hsize_t, N> cur_resolution)
141 :
id_holder{H5Screate_simple(N,
boost::reverse(cur_resolution).data(),
144 template <std::
size_t N>
146 std::array<hsize_t, N> maxdims)
147 :
id_holder{H5Screate_simple(N,
boost::reverse(cur_resolution).data(),
148 boost::reverse(maxdims).data())} {}
155 auto rank()
const {
return H5Sget_simple_extent_ndims(
id()); }
158 using res_container = std::vector<hsize_t>;
159 using size_type =
typename res_container::size_type;
160 auto cur_res = res_container(
static_cast<size_type
>(
rank()));
161 H5Sget_simple_extent_dims(
id(), cur_res.data(),
nullptr);
162 return boost::reverse(cur_res);
166 using res_container = std::vector<hsize_t>;
167 using size_type =
typename res_container::size_type;
168 auto max_res = res_container(
static_cast<size_type
>(
rank()));
169 H5Sget_simple_extent_dims(
id(),
nullptr, max_res.data());
170 return boost::reverse(max_res);
174 using hsize_t_container = std::vector<hsize_t>;
175 using size_type =
typename hsize_t_container::size_type;
176 auto ret = std::tuple{hsize_t_container(
static_cast<size_type
>(
rank())),
177 hsize_t_container(
static_cast<size_type
>(
rank()))};
178 H5Sget_simple_extent_dims(
id(), std::get<0>(ret).data(),
179 std::get<1>(ret).data());
180 boost::reverse(std::get<0>(ret));
181 boost::reverse(std::get<1>(ret));
185 auto num_elements()
const {
return H5Sget_simple_extent_npoints(
id()); }
188 return H5Sget_select_hyper_nblocks(
id());
191 return H5Sget_select_elem_npoints(
id());
195 hsize_t
const* count, hsize_t
const* block =
nullptr) {
196 H5Sselect_hyperslab(
id(), H5S_SELECT_SET, start, stride, count, block);
200 hsize_t
const* stride, hsize_t
const* count,
201 hsize_t
const* block =
nullptr) {
202 H5Sselect_hyperslab(
id(), op, start, stride, count, block);
206 std::vector<hsize_t> stride,
207 std::vector<hsize_t> count) {
208 boost::reverse(offset);
209 boost::reverse(stride);
210 boost::reverse(count);
215 std::vector<hsize_t> count) {
216 boost::reverse(offset);
217 boost::reverse(count);
226 bool has_unlimited_dimension =
false;
228 for (
auto dim :
max) {
230 has_unlimited_dimension =
true;
234 return has_unlimited_dimension;
238 auto n = std::string(
239 static_cast<std::string::size_type
>(H5Aget_name(
id(), 0,
nullptr)),
241 H5Aget_name(
id(), n.size(), n.data());
246 auto i = H5A_info_t{};
247 H5Aget_info(
id(), &i);
271 template <
typename T>
276 throw std::runtime_error{
"Attribute not found."};
278 auto t = H5Aget_type(attr_id);
279 if constexpr (is_same<T, std::string>) {
280 attr = T(H5Tget_size(t) - 1,
' ');
281 H5Aread(attr_id, t, attr.data());
283 H5Aread(attr_id, t, &attr);
298 auto read_int8()
const {
return read_as<std::int8_t>(); }
310 template <
typename T>
317 auto type = hdf5::type<T>{};
318 if constexpr (is_same<T, std::string>) {
319 type.set_size(val.size() + 1);
320 }
else if constexpr (is_same<T, char const*>) {
321 type.set_size(std::strlen(val));
325 H5P_DEFAULT, H5P_DEFAULT);
328 if constexpr (is_same<T, std::string>) {
329 H5Awrite(attr_id, type.id(), val.data());
330 }
else if constexpr (is_same<T, char const*>) {
331 H5Awrite(attr_id, type.id(), val);
333 H5Awrite(attr_id, type.id(), &val);
339 template <
typename T>
346template <
typename IDHolder>
350 return *
static_cast<IDHolder const*
>(
this);
357 [[nodiscard]]
auto attribute(std::string
const& name)
const {
373 template <
typename... Size>
376 if constexpr (
sizeof...(Size) > 0) {
377 auto dims = std::array{
static_cast<hsize_t
>(
size)...};
378 bool has_unlimited_dimension =
false;
379 for (
auto dim : dims) {
381 has_unlimited_dimension =
true;
387 if (has_unlimited_dimension) {
388 for (
auto& dim : dims) {
398 set_id(H5Dcreate(parent_id,
name.data(), type_id<T>(), ds.id(),
399 H5P_DEFAULT, plist.id(), H5P_DEFAULT));
436 auto resize(hsize_t
const extent) { H5Dset_extent(
id(), &extent); }
438 auto resize(std::vector<hsize_t>
const& extent) {
439 H5Dset_extent(
id(), extent.data());
442 template <std::
size_t N>
443 auto resize(std::array<hsize_t, N>
const& extent) {
444 H5Dset_extent(
id(), extent.data());
447 template <
integral Integral>
448 auto resize(std::vector<Integral>
const& extent) {
452 template <
integral Integral, std::
size_t N>
453 auto resize(std::array<Integral, N>
const& extent) {
457 template <
typename... Size>
459 resize(std::array{
static_cast<hsize_t
>(
size)...});
464 auto const [cur_res, max_res] = ds.current_and_max_resolution();
465 assert(cur_res.size() == 1);
466 if (requested_size > cur_res[0] && max_res[0] ==
unlimited) {
473 auto const [cur_res, max_res] = ds.current_and_max_resolution();
474 assert(cur_res.size() == requested_size.size());
475 bool must_resize =
true;
476 for (std::size_t i = 0; i < cur_res.size(); ++i) {
477 if (requested_size[i] > cur_res[i] && max_res[i] ==
unlimited) {
492 auto write(hid_t mem_space_id, hid_t file_space_id, hid_t xfer_plist_id,
493 const void* buf)
const ->
void {
494 H5Dwrite(
id(), type_id<T>(), mem_space_id, file_space_id, xfer_plist_id,
499 write(H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
502 auto write(std::vector<T>
const& data) ->
void {
504 write(H5S_ALL, H5S_ALL, H5P_DEFAULT, data.data());
507 auto write(std::vector<T>
const& data, hsize_t
const offset) ->
void {
509 write(data.data(), std::vector{offset},
510 std::vector{static_cast<hsize_t>(data.size())});
514 auto cur_res =
dataspace().current_resolution();
515 write(data, cur_res[0]);
519 auto cur_res =
dataspace().current_resolution();
521 write(&data, std::vector{cur_res[0]}, std::vector{hsize_t(1)});
524 template <std::
size_t N>
525 auto write(std::array<T, N>
const& data) ->
void {
527 write(H5S_ALL, H5S_ALL, H5P_DEFAULT, data.data());
535 template <
typename IndexOrder>
540 template <
typename IndexOrder>
542 std::vector<std::size_t>
const& offset) ->
void {
543 assert(data.num_dimensions() == offset.size());
544 auto const size = data.size();
545 auto total_size =
size;
546 for (std::size_t i = 0; i <
size.size(); ++i) {
547 total_size[i] += offset[i];
550 write(data.data(), std::vector<hsize_t>(
begin(offset),
end(offset)),
565 auto write(T
const& data, Is
const... is) ->
void {
566 write<IndexOrder>(&data, std::vector<hsize_t>{
static_cast<hsize_t
>(is)...},
567 std::vector<hsize_t>(
sizeof...(Is), 1));
570 auto write(T
const& data, std::vector<std::size_t>
const& offset) ->
void {
571 write(&data, std::vector<hsize_t>(
begin(offset),
end(offset)),
572 std::vector<hsize_t>(
size(offset), 1));
575 auto write(T
const& data, std::vector<hsize_t> offset) ->
void {
576 write(&data, std::move(offset), std::vector<hsize_t>(
size(offset), 1));
579 auto write(std::vector<T>
const& data, std::vector<std::size_t>
const& offset,
580 std::vector<std::size_t>
const& count) ->
void {
581 write(data.data(), std::vector<hsize_t>(
begin(offset),
end(offset)),
582 std::vector<hsize_t>(
begin(count),
end(count)));
585 auto write(T
const* data, std::vector<std::size_t>
const& offset,
586 std::vector<std::size_t>
const& count) ->
void {
587 write(data, std::vector<hsize_t>(
begin(offset),
end(offset)),
588 std::vector<hsize_t>(
begin(count),
end(count)));
591 auto write(std::vector<T>
const& data, std::vector<hsize_t> offset,
592 std::vector<hsize_t> count) ->
void {
593 write(data.data(), std::move(offset), std::move(count));
596 template <
typename IndexOrder = x_fastest>
597 auto write(T
const* data, std::vector<hsize_t> offset,
598 std::vector<hsize_t> count) ->
void {
599 assert(offset.size() == count.size());
602 dataset_space.select_hyperslab(offset, count);
604 write(memory_space.id(), dataset_space.id(), H5P_DEFAULT, data);
607 auto read(hid_t mem_space_id, hid_t file_space_id, hid_t xfer_plist_id,
608 T* buf)
const ->
void {
609 H5Dread(
id(), type_id<T>(), mem_space_id, file_space_id, xfer_plist_id,
613 template <
typename IndexOrder = x_fastest>
620 template <
typename IndexOrder>
623 auto const rank = dataset_space.rank();
624 auto size = dataset_space.current_resolution();
627 for (
int i = 0; i <
rank; ++i) {
637 read(H5S_ALL, H5S_ALL, H5P_DEFAULT, arr.
data());
646 auto read(std::vector<hsize_t>
const& offset,
647 std::vector<hsize_t>
const& count, std::vector<T>& data)
const {
648 assert(offset.size() == count.size());
651 dataset_space.select_hyperslab(offset, count);
654 read(memory_space.id(), dataset_space.id(), H5P_DEFAULT, data.data());
657 auto read(hsize_t
const offset, hsize_t
const count,
658 std::vector<T>& data)
const {
659 assert(count == data.size());
661 dataset_space.select_hyperslab(offset, count);
664 read(memory_space.id(), dataset_space.id(), H5P_DEFAULT, data.data());
667 template <
integral Int0,
integral Int1>
669 std::vector<Int1>
const& count)
const {
671 std::vector<hsize_t>(
begin(count),
end(count)));
674 template <
typename IndexOrder = x_fastest>
675 auto read(std::vector<T>& data)
const {
676 std::size_t num_entries =
677 boost::accumulate(
dataspace().current_resolution(), std::size_t(1),
678 std::multiplies<std::size_t>{});
679 if (data.size() != num_entries) {
680 data.resize(num_entries);
683 read(H5S_ALL, H5S_ALL, H5P_DEFAULT, data.data());
686 template <
typename IndexOrder>
687 auto read(std::vector<std::size_t>
const& offset,
688 std::vector<std::size_t>
const& count,
691 std::vector<hsize_t>(
begin(count),
end(count)), arr);
695 template <
typename IndexOrder = x_fastest>
696 auto read(std::vector<std::size_t>
const& offset,
697 std::vector<std::size_t>
const& count)
const
698 requires(!is_same<hsize_t, std::size_t>)
700 return read<IndexOrder>(std::vector<hsize_t>(
begin(offset),
end(offset)),
701 std::vector<hsize_t>(
begin(count),
end(count)));
704 template <
typename IndexOrder = x_fastest>
705 auto read(std::vector<hsize_t>
const& offset,
706 std::vector<hsize_t>
const& count)
const {
708 read(offset, count, arr);
712 template <
typename IndexOrder>
713 auto read(std::vector<hsize_t> offset, std::vector<hsize_t> count,
715 assert(offset.size() == count.size());
717 std::vector<hsize_t> count_without_ones;
720 std::size_t
rank = 0;
721 for (std::size_t i = 0; i < count.size(); ++i) {
724 count_without_ones.push_back(count[i]);
728 for (std::size_t i = 0; i < arr.num_dimensions(); ++i) {
729 if (arr.size(i) > 1) {
737 for (std::size_t i = 0; i <
rank; ++i) {
738 if (arr.size(i) != count_without_ones[i]) {
739 arr.resize(count_without_ones);
744 ds.select_hyperslab(offset, count);
746 read(memory_space.id(), ds.id(), H5P_DEFAULT, arr.data());
751 auto offset = std::vector<hsize_t>{
static_cast<hsize_t
>(is)...};
752 auto count = std::vector<hsize_t>(
sizeof...(is), 1);
755 ds.select_hyperslab(offset, count);
758 read(ms.id(), ds.id(), H5P_DEFAULT, &data);
765 auto dataset_space = H5Dget_space(
id());
766 auto ndims = H5Sget_simple_extent_ndims(dataset_space);
767 H5Sclose(dataset_space);
771 auto read_lazy(std::vector<std::size_t>
const& chunk_size) {
783template <
typename IDHolder>
787 return *
static_cast<IDHolder const*
>(
this);
789 template <
typename T,
typename IndexOrder = x_fastest>
794 template <
typename T>
795 [[nodiscard]]
auto dataset(
char const* name)
const {
799 template <
typename T>
800 [[nodiscard]]
auto dataset(std::string
const& name)
const {
807template <
typename IDHolder>
811 return *
static_cast<IDHolder const*
>(
this);
818 auto group(std::string
const& name) {
return group(name.data()); }
821template <
typename IDHolder>
837 group(hid_t
const parent_id,
char const* name)
838 :
node{H5Gopen(parent_id, name, H5P_DEFAULT)},
m_name{name} {
840 set_id(H5Gcreate(parent_id, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT));
844 group(hid_t
const parent_id, std::string
const& name)
845 :
group{parent_id, name.c_str()} {}
866 explicit file(filesystem::path
const& path) :
node{-1} {
869#if defined(_WIN32) || defined(WIN32)
871 std::wcstombs(path_c_str, path.c_str(), path.string().size() + 1);
878 explicit file(std::string
const& path) :
file{path.data()} {}
900 auto open(
char const* path) ->
void {
901 if (filesystem::exists(filesystem::path{path})) {
902 set_id(H5Fopen(path, H5F_ACC_RDWR, H5P_DEFAULT));
904 set_id(H5Fcreate(path, H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT));
911 hid_t link_access_property_list_id = H5P_DEFAULT)
const {
912 return H5Lexists(
id(), name, link_access_property_list_id);
916 hid_t link_access_property_list_id = H5P_DEFAULT)
const {
917 return node_exists(name.c_str(), link_access_property_list_id);
925#pragma message("including <tatooine/hdf5.h> without HDF5 support.")
Definition: dynamic_multidim_array.h:18
constexpr auto data(std::size_t const i) -> auto &
Definition: dynamic_multidim_array.h:311
auto size() const -> auto const &
Definition: dynamic_multidim_size.h:107
auto resize(integral auto const ... size) -> void
Definition: dynamic_multidim_array.h:273
auto num_dimensions() const
Definition: dynamic_multidim_size.h:105
Definition: concepts.h:21
static constexpr auto unlimited
Definition: hdf5.h:23
auto begin(Range &&range)
Definition: iterator_facade.h:318
auto end(Range &&range)
Definition: iterator_facade.h:322
constexpr auto max(A &&a, B &&b)
Definition: math.h:20
auto size(vec< ValueType, N > const &v)
Definition: vec.h:148
constexpr auto rank()
Definition: rank.h:10
void * m_old_client_data
Definition: hdf5.h:28
auto _enable_error_printing() -> void
Definition: hdf5.h:55
api()
Definition: hdf5.h:30
static auto error_handler(void *) -> herr_t
Definition: hdf5.h:59
static auto disable_error_printing() -> void
Definition: hdf5.h:40
auto _disable_error_printing() -> void
Definition: hdf5.h:45
static auto get() -> auto &
Definition: hdf5.h:34
static auto enable_error_printing() -> void
Definition: hdf5.h:50
H5E_auto_t m_old_func
Definition: hdf5.h:27
auto attribute(char const *name) const
Definition: hdf5.h:353
auto as_id_holder() const -> auto const &
Definition: hdf5.h:349
auto as_id_holder() -> auto &
Definition: hdf5.h:348
auto attribute(std::string const &name) const
Definition: hdf5.h:357
auto read_int16() const
Definition: hdf5.h:302
attribute(hid_t const parent_id, std::string name)
Definition: hdf5.h:261
auto read_int8() const
Definition: hdf5.h:298
std::string m_name
Definition: hdf5.h:258
auto read_as_string() const
Definition: hdf5.h:290
hid_t m_parent_id
Definition: hdf5.h:257
auto read_int() const
Definition: hdf5.h:292
auto read_as() const
Definition: hdf5.h:272
auto read_uint16() const
Definition: hdf5.h:304
auto write(T const &val)
Definition: hdf5.h:311
auto operator=(T const &val) -> attribute &
Definition: hdf5.h:340
attribute(attribute &&) noexcept=default
auto read_float() const
Definition: hdf5.h:294
auto read_uint8() const
Definition: hdf5.h:300
auto read_int32() const
Definition: hdf5.h:306
auto read_double() const
Definition: hdf5.h:296
auto read_uint32() const
Definition: hdf5.h:308
auto dataset(std::string const &name) const
Definition: hdf5.h:800
auto as_id_holder() const -> auto const &
Definition: hdf5.h:786
auto as_id_holder() -> auto &
Definition: hdf5.h:785
auto create_dataset(std::string const &name, integral auto const ... size)
Definition: hdf5.h:790
auto dataset(char const *name) const
Definition: hdf5.h:795
auto write(std::array< T, N > const &data) -> void
Definition: hdf5.h:525
auto read(std::vector< T > &data) const
Definition: hdf5.h:675
auto read(hsize_t const offset, hsize_t const count, std::vector< T > &data) const
Definition: hdf5.h:657
auto write(hid_t mem_space_id, hid_t file_space_id, hid_t xfer_plist_id, const void *buf) const -> void
Definition: hdf5.h:492
auto resize(std::array< Integral, N > const &extent)
Definition: hdf5.h:453
auto read() const
Definition: hdf5.h:614
auto push_back(T const &data) -> void
Definition: hdf5.h:518
auto flush()
Definition: hdf5.h:778
auto write(T const *data, std::vector< hsize_t > offset, std::vector< hsize_t > count) -> void
Definition: hdf5.h:597
dataset(dataset const &other)
Definition: hdf5.h:409
auto read(hid_t mem_space_id, hid_t file_space_id, hid_t xfer_plist_id, T *buf) const -> void
Definition: hdf5.h:607
auto num_dimensions() const -> std::size_t
Definition: hdf5.h:764
auto write(T const &data, Is const ... is) -> void
Definition: hdf5.h:565
auto name() const -> auto const &
Definition: hdf5.h:775
auto read(std::vector< std::size_t > const &offset, std::vector< std::size_t > const &count) const
Definition: hdf5.h:696
auto read_as_vector(std::vector< Int0 > const &offset, std::vector< Int1 > const &count) const
Definition: hdf5.h:668
auto resize_if_necessary(std::vector< hsize_t > const &requested_size)
Definition: hdf5.h:471
dataset(dataset &&) noexcept=default
auto write(std::vector< T > const &data) -> void
Definition: hdf5.h:502
auto size() const
Definition: hdf5.h:780
auto resize(std::array< hsize_t, N > const &extent)
Definition: hdf5.h:443
auto write(std::vector< T > const &data, hsize_t const offset) -> void
Definition: hdf5.h:507
auto resize(hsize_t const extent)
Definition: hdf5.h:436
auto resize(std::vector< hsize_t > const &extent)
Definition: hdf5.h:438
auto read_lazy(std::vector< std::size_t > const &chunk_size)
Definition: hdf5.h:771
dataset(hid_t const parent_id, std::string const &name, Size const ... size)
Definition: hdf5.h:374
auto read(std::vector< hsize_t > offset, std::vector< hsize_t > count, dynamic_multidim_array< T, IndexOrder > &arr) const -> auto &
Definition: hdf5.h:713
auto write(dynamic_multidim_array< T, IndexOrder > const &data, std::vector< std::size_t > const &offset) -> void
Definition: hdf5.h:541
T value_type
Definition: hdf5.h:366
auto resize_if_necessary(hsize_t const requested_size)
Definition: hdf5.h:462
auto clear()
Definition: hdf5.h:487
auto read_as_vector() const
Definition: hdf5.h:640
auto resize(Size const ... size)
Definition: hdf5.h:458
auto write(T const &data, std::vector< std::size_t > const &offset) -> void
Definition: hdf5.h:570
std::string m_name
Definition: hdf5.h:370
auto read(std::vector< std::size_t > const &offset, std::vector< std::size_t > const &count, dynamic_multidim_array< T, IndexOrder > &arr) const
Definition: hdf5.h:687
auto write(std::vector< T > const &data, std::vector< std::size_t > const &offset, std::vector< std::size_t > const &count) -> void
Definition: hdf5.h:579
auto read(std::vector< hsize_t > const &offset, std::vector< hsize_t > const &count) const
Definition: hdf5.h:705
auto write(T const *data, std::vector< std::size_t > const &offset, std::vector< std::size_t > const &count) -> void
Definition: hdf5.h:585
auto read(integral auto const ... is) const
Definition: hdf5.h:750
auto read(dynamic_multidim_array< T, IndexOrder > &arr) const
Definition: hdf5.h:621
auto push_back(std::vector< T > const &data) -> void
Definition: hdf5.h:513
auto resize(std::vector< Integral > const &extent)
Definition: hdf5.h:448
auto write(dynamic_multidim_array< T, IndexOrder > const &data) -> void
Definition: hdf5.h:536
auto dataspace() const
Definition: hdf5.h:777
auto write(std::vector< T > const &data, std::vector< hsize_t > offset, std::vector< hsize_t > count) -> void
Definition: hdf5.h:591
auto operator[](hsize_t const i) const
Definition: hdf5.h:762
auto operator=(dataset &&) noexcept -> dataset &=default
hid_t m_parent_id
Definition: hdf5.h:369
auto write(T const *data) -> void
Definition: hdf5.h:498
auto read(std::vector< hsize_t > const &offset, std::vector< hsize_t > const &count, std::vector< T > &data) const
Definition: hdf5.h:646
auto write(T const &data, std::vector< hsize_t > offset) -> void
Definition: hdf5.h:575
auto rank() const
Definition: hdf5.h:155
dataspace(std::array< hsize_t, N > cur_resolution)
Definition: hdf5.h:140
dataspace(dataspace const &other)
Definition: hdf5.h:121
~dataspace()
Definition: hdf5.h:150
auto name() const
Definition: hdf5.h:237
dataspace(integral auto const ... size)
Definition: hdf5.h:125
dataspace(hid_t const id)
Definition: hdf5.h:123
auto select_hyperslab(std::vector< hsize_t > offset, std::vector< hsize_t > count)
Definition: hdf5.h:214
auto select_hyperslab(std::vector< hsize_t > offset, std::vector< hsize_t > stride, std::vector< hsize_t > count)
Definition: hdf5.h:205
auto select_hyperslab(H5S_seloper_t op, hsize_t const *start, hsize_t const *stride, hsize_t const *count, hsize_t const *block=nullptr)
Definition: hdf5.h:199
auto selected_num_hyperslab_blocks() const
Definition: hdf5.h:190
auto num_hyperslab_blocks() const
Definition: hdf5.h:187
auto select_hyperslab(hsize_t const offset, hsize_t const count)
Definition: hdf5.h:221
auto current_and_max_resolution() const
Definition: hdf5.h:173
auto num_elements() const
Definition: hdf5.h:185
dataspace(std::vector< hsize_t > cur_resolution)
Definition: hdf5.h:128
auto is_unlimited() const
Definition: hdf5.h:225
auto max_resolution() const
Definition: hdf5.h:165
auto current_resolution() const
Definition: hdf5.h:157
dataspace(std::vector< hsize_t > cur_resolution, std::vector< hsize_t > max_resolution)
Definition: hdf5.h:133
dataspace(std::array< hsize_t, N > cur_resolution, std::array< hsize_t, N > maxdims)
Definition: hdf5.h:145
auto select_hyperslab(hsize_t const *start, hsize_t const *stride, hsize_t const *count, hsize_t const *block=nullptr)
Definition: hdf5.h:194
auto info() const
Definition: hdf5.h:245
auto selected_num_elements() const
Definition: hdf5.h:186
file(file const &other)
Definition: hdf5.h:885
file(file &&) noexcept=default
auto open(char const *path) -> void
Definition: hdf5.h:900
auto node_exists(char const *name, hid_t link_access_property_list_id=H5P_DEFAULT) const
Definition: hdf5.h:910
file(std::string const &path)
Definition: hdf5.h:878
auto node_exists(std::string const &name, hid_t link_access_property_list_id=H5P_DEFAULT) const
Definition: hdf5.h:915
file(char const *path)
Definition: hdf5.h:880
file(filesystem::path const &path)
Definition: hdf5.h:866
auto operator=(file &&) noexcept -> file &=default
auto as_id_holder() -> auto &
Definition: hdf5.h:809
auto group(std::string const &name)
Definition: hdf5.h:818
auto as_id_holder() const -> auto const &
Definition: hdf5.h:810
auto group(char const *name)
Definition: hdf5.h:814
group(group &&) noexcept=default
auto sub_group(char const *name)
Definition: hdf5.h:860
group(hid_t const parent_id, char const *name)
Definition: hdf5.h:837
group(hid_t const parent_id, std::string const &name)
Definition: hdf5.h:844
auto operator=(group &&) noexcept -> group &=default
std::string m_name
Definition: hdf5.h:834
auto sub_group(std::string const &name)
Definition: hdf5.h:861
auto id() const
Definition: hdf5.h:72
hid_t m_id
Definition: hdf5.h:68
auto set_id(hid_t const id)
Definition: hdf5.h:73
id_holder(hid_t const id)
Definition: hdf5.h:71
node(hid_t const id)
Definition: hdf5.h:826
property_list(hid_t cls_id=H5P_DEFAULT)
Definition: hdf5.h:86
~property_list()
Definition: hdf5.h:94
auto set_chunk(integral auto const ... size)
Definition: hdf5.h:110
auto is_default() const
Definition: hdf5.h:99
property_list(property_list const &other)
Definition: hdf5.h:88
auto close() -> void
Definition: hdf5.h:104
auto operator=(property_list const &other) -> property_list &
Definition: hdf5.h:89
static auto dataset_creation()
Definition: hdf5.h:80
Definition: lazy_reader.h:14
Definition: index_order.h:17