#include <h5cpp/all>
#include <array>
#include <complex>
#include <deque>
#include <forward_list>
#include <iostream>
#include <list>
#include <set>
#include <unordered_set>
#include <vector>
template <class Fn>
static void try_block(const char* label, Fn&& fn) {
try { fn(); }
} catch (...) {
std::cout <<
"✘ failed " << label <<
" (unknown exception)\n";
}
}
int main() {
auto check = [](const char* label, bool ok) {
std::cout << (ok ?
"✔ ok " :
"✘ failed") <<
" " << label <<
"\n";
};
try_block("std::vector<std::vector<int>> ragged_vlen round-trip", [&]() {
std::cout <<
" vector<vector<int>>(4) = " << back <<
"\n";
check("std::vector<std::vector<int>> ragged_vlen round-trip", back == vv);
});
try_block("std::vector<std::array<double,3>>(3) round-trip", [&]() {
std::cout <<
" vector<array<double,3>>(3)= " << back <<
"\n";
check("std::vector<std::array<double,3>>(3) round-trip", back == va);
});
try_block("std::complex<double> scalar round-trip", [&]() {
h5::read(fd,
"/nested/complex_scalar", back);
std::cout <<
" complex<double> = " << back <<
"\n";
check("std::complex<double> scalar round-trip", back == c);
});
try_block("std::vector<std::list<int>>(3) ragged_vlen", [&]() {
std::cout <<
" vector<list<int>>(3) = " << back <<
"\n";
check("std::vector<std::list<int>>(3) ragged_vlen round-trip", back == v);
});
try_block("std::vector<std::deque<int>>(2) ragged_vlen", [&]() {
std::cout <<
" vector<deque<int>>(2) = " << back <<
"\n";
check("std::vector<std::deque<int>>(2) ragged_vlen round-trip", back == v);
});
try_block("std::vector<std::set<int>>(2) ragged_vlen", [&]() {
std::cout <<
" vector<set<int>>(2) = " << back <<
"\n";
check("std::vector<std::set<int>>(2) ragged_vlen round-trip", back == v);
});
try_block("std::vector<std::forward_list<int>>(2) ragged_vlen", [&]() {
std::cout <<
" vector<forward_list>(2) = " << back <<
"\n";
check("std::vector<std::forward_list<int>>(2) ragged_vlen round-trip", back == v);
});
try_block("std::list<std::array<int,3>>(2) list-of-fixed-array", [&]() {
std::cout <<
" list<array<int,3>>(2) = [...]\n";
check("std::list<std::array<int,3>>(2) list-of-fixed-array", back == src);
});
try_block("std::array<std::array<int,3>, 2> nested array_element", [&]() {
h5::read(fd,
"/nested/arr_arr_int", back);
std::cout <<
" array<array<int,3>,2> = [[" << back[0][0] <<
"," << back[0][1] <<
"," << back[0][2]
<< "],[" << back[1][0] << "," << back[1][1] << "," << back[1][2] << "]]\n";
check("std::array<std::array<int,3>, 2> nested array_element", back == src);
});
try_block("std::vector<std::complex<float>>(4) round-trip", [&]() {
std::cout <<
" vector<complex<float>>(4) = " << back <<
"\n";
check("std::vector<std::complex<float>>(4) round-trip", back == vc);
});
return 0;
}
h5::at_t create(const hid_t &parent, const std::string &path, args_t &&... args)
Create a new attribute of element type T on a parent HDF5 object.
Definition H5Acreate.hpp:100
T aread(const hid_t &ds, const std::string &name, const h5::acpl_t &acpl=h5::default_acpl)
Read an attribute by name and return its value as type T.
Definition H5Aread.hpp:76
std::enable_if_t<!std::is_same_v< T, char ** >, void > read(const h5::ds_t &ds, T *ptr, args_t &&... args)
Read elements from an open HDF5 dataset into caller-allocated memory.
Definition H5Dread.hpp:56
h5::gr_t write(const LOC &parent, const std::string &path, const T &src)
Write a sparse matrix or vector as a CSC group.
Definition H5Dsparse.hpp:185