40 auto shandle = group.openGroup(
"seed");
41 seed_details =
validate(shandle, version, options);
43 std::throw_with_nested(std::runtime_error(
"failed to validate 'seed'"));
48 auto vhandle = group.openGroup(
"value");
49 value_details =
validate(vhandle, version, options);
51 std::throw_with_nested(std::runtime_error(
"failed to validate 'value'"));
55 if ((value_details.
type == STRING) != (seed_details.
type == STRING)) {
56 throw std::runtime_error(
"both or neither of the 'seed' and 'value' arrays should contain strings");
59 const auto& seed_dims = seed_details.
dimensions;
60 if (seed_dims.size() != value_details.
dimensions.size()) {
61 throw std::runtime_error(
"'seed' and 'value' arrays should have the same dimensionality");
64 std::vector<std::pair<std::size_t, std::size_t> > collected;
66 auto ihandle = group.openGroup(
"index");
69 std::throw_with_nested(std::runtime_error(
"failed to validate 'index'"));
72 auto expected_dims = seed_dims;
73 for (
auto p : collected) {
74 expected_dims[p.first] = p.second;
77 if (!are_dimensions_equal(expected_dims, value_details.
dimensions)) {
78 throw std::runtime_error(
"'value' dimension extents are not consistent with lengths of indices in 'index'");
83 seed_details.
type = std::max(seed_details.
type, value_details.
type);
ArrayDetails validate(const H5::Group &group, const ritsuko::Version &version, const Options &options)
Definition validate.hpp:96
ArrayDetails validate_subset_assignment(const H5::Group &group, const ritsuko::Version &version, const Options &options)
Definition subset_assignment.hpp:37