1#ifndef RITSUKO_HDF5_VLS_define_pointer_datatype_HPP
2#define RITSUKO_HDF5_VLS_define_pointer_datatype_HPP
32template<
typename Offset_,
typename Length_>
59template<
typename Offset_,
typename Length_>
62 H5::CompType pointer_type(
sizeof(tmp));
86 if (type.getNmembers() != 2) {
87 throw std::runtime_error(
"expected VLS compound datatype to have two members");
90 if (type.getMemberName(0) !=
"offset") {
91 throw std::runtime_error(
"first member of a VLS compound datatype should be named 'offset'");
93 if (type.getMemberClass(0) != H5T_INTEGER) {
94 throw std::runtime_error(
"first member of a VLS compound datatype should have integer type");
96 auto offset_type = type.getMemberIntType(0);
98 throw std::runtime_error(
"first member of a VLS compound datatype should not exceed a " + std::to_string(offset_precision) +
"-bit unsigned integer");
101 if (type.getMemberName(1) !=
"length") {
102 throw std::runtime_error(
"second member of a VLS compound datatype should be named 'length'");
104 if (type.getMemberClass(0) != H5T_INTEGER) {
105 throw std::runtime_error(
"second member of a VLS compound datatype should have integer type");
107 auto length_type = type.getMemberIntType(1);
109 throw std::runtime_error(
"second member of a VLS compound datatype should not exceed a " + std::to_string(length_precision) +
"-bit unsigned integer");
Check for larger-than-expected types in HDF5 datasets.
void validate_pointer_datatype(const H5::CompType &type, size_t offset_precision, size_t length_precision)
Definition Pointer.hpp:85
H5::CompType define_pointer_datatype()
Definition Pointer.hpp:60
const H5::PredType & as_numeric_datatype()
Definition as_numeric_datatype.hpp:26
bool exceeds_integer_limit(const H5::IntType &itype, size_t precision, bool is_signed)
Definition exceeds_limit.hpp:27
Assorted helper functions for parsing and validation.
Definition choose_missing_placeholder.hpp:15
Pointer into the VLS heap.
Definition Pointer.hpp:33
Offset_ offset
Definition Pointer.hpp:38
Length_ length
Definition Pointer.hpp:48