7#ifndef UTOPIA_DATAIO_HDFTYPEFACTORY_HH
8#define UTOPIA_DATAIO_HDFTYPEFACTORY_HH
38template <
typename T >
163 std::vector< float >,
164 std::vector< double >,
165 std::vector< long double >,
167 std::vector< short int >,
168 std::vector< long int >,
169 std::vector< long long int >,
170 std::vector< unsigned int >,
171 std::vector< unsigned short int >,
172 std::vector< std::size_t >,
173 std::vector< unsigned long long >,
176 std::vector< std::string >,
222 template <
typename T >
226 this->
_log->debug(
"Opening HDFType from existing object {}",
231 throw std::runtime_error(
232 "Error, cannot open HDFType while it's still bound to another "
233 "valid type object, close it first");
238 "datatype of " +
object.
get_path());
253 template <
typename T >
257 this->
_log->debug(
"Opening HDFType from scratch");
261 throw std::runtime_error(
262 "Error, cannot open HDFType '" + name +
"' while it's still bound "
263 "to another valid type object! Close it first.");
267 if constexpr (Utils::is_container_v< T >)
272 Detail::get_type< typename T::value_type >()),
281 Detail::get_type< typename T::value_type >(), 1, dim),
287 else if constexpr (Utils::is_string_v< T >)
308 _id.
open(Detail::get_type< T >(),
368 other._mutable =
false;
384 other._mutable =
false;
427 template <
typename T >
429 std::enable_if_t<
not std::is_same_v<
HDFType, std::decay_t< T > >,
int > = 0):
452 lhs.type_category() ==
rhs.type_category();
463 throw std::runtime_error(
"Error when comparing dataspaces");
void open(hid_t id, std::function< herr_t(hid_t) > closing_func)
Open the object and bind it to another C-Level id.
Definition hdfidentifier.hh:156
Common base class for all HDF5 classes in the DATAIO Module i.e., for all classes that wrap HDF5-C-Li...
Definition hdfobject.hh:37
std::string _path
Name of the object.
Definition hdfobject.hh:50
std::string get_path() const
Get the name or path object.
Definition hdfobject.hh:88
void close()
Close function which takes care of correctly closing the object and managing the reference counter.
Definition hdfobject.hh:161
virtual bool is_valid() const
Check if the object is still valid.
Definition hdfobject.hh:143
std::shared_ptr< spdlog::logger > _log
pointer to the logger for dataio
Definition hdfobject.hh:56
HDFIdentifier _id
Identifier object that binds an instance of this class to an HDF5 object.
Definition hdfobject.hh:44
hid_t get_C_id() const
Get the C id object.
Definition hdfobject.hh:120
void bind_to(hid_t id, std::function< herr_t(hid_t) > closing_func, std::string path={})
Open the object and bind it to a HDF5 object identified by 'id' with name 'path'. Object should be cr...
Definition hdfobject.hh:186
Class which handles the conversion of C-types into hdf5types.
Definition hdftype.hh:136
void open(T &&object)
Open the HDF5 type associated with an HDFObject, i.e., a dataset or an attribute.
Definition hdftype.hh:224
void open(std::string name, hsize_t typesize)
Create an HDF datatype corresponding to the C datatype given as template argument.
Definition hdftype.hh:255
HDFType(HDFType &&other)
Construct HDFType from the given arguments by move, deleted, because apparently incompatible with HDF...
Definition hdftype.hh:363
virtual ~HDFType()
Destroy the HDFType object.
Definition hdftype.hh:408
HDFType()
Construct HDFType from by default.
Definition hdftype.hh:417
void close()
Construct close from the given arguments.
Definition hdftype.hh:322
auto type_category() const
Get the type category of the held type, i.e., scala, string, varlen,...
Definition hdftype.hh:199
HDFType(T &&object_or_size, std::enable_if_t< not std::is_same_v< HDFType, std::decay_t< T > >, int >=0)
Construct HDFType from the given arguments.
Definition hdftype.hh:428
H5T_class_t _classid
Definition hdftype.hh:143
HDFType & operator=(const HDFType &other)=default
Copy assign type.
std::size_t size() const
Size of the type held in bytes.
Definition hdftype.hh:210
HDFType & operator=(HDFType &&other)
Move assign the type.
Definition hdftype.hh:378
bool _mutable
Definition hdftype.hh:140
bool is_mutable() const
Get if the type is mutable or not.
Definition hdftype.hh:187
virtual bool is_valid() const override
Check if the held type identifier is still valid. Primitive types are valid by definition,...
Definition hdftype.hh:342
std::variant< float, double, long double, int, short int, long int, long long int, unsigned int, unsigned short int, std::size_t, unsigned long long, bool, char, std::vector< float >, std::vector< double >, std::vector< long double >, std::vector< int >, std::vector< short int >, std::vector< long int >, std::vector< long long int >, std::vector< unsigned int >, std::vector< unsigned short int >, std::vector< std::size_t >, std::vector< unsigned long long >, std::vector< char >, std::vector< std::string >, std::string, const char * > Variant
Definition hdftype.hh:178
HDFType(const HDFType &other)=default
Construct HDFType from the given arguments by copy.
Container select_entities(const Manager &mngr, const DataIO::Config &sel_cfg)
Select entities according to parameters specified in a configuration.
Definition select.hh:213
bool operator!=(const HDFIdentifier &lhs, const HDFIdentifier &rhs)
Comparsion operator for inequality.
Definition hdfidentifier.hh:275
bool operator==(const HDFIdentifier &lhs, const HDFIdentifier &rhs)
Comparsion operator for equality.
Definition hdfidentifier.hh:262
hid_t open_type(Object &&object)
Depending on object category, invokes H5Dget_type or H5Aget_type.
Definition hdfutilities.hh:261
This file provides metafunctions for automatically determining the nature of a C/C++ types at compile...
hid_t get_type< double >()
Definition hdftype.hh:54
hid_t get_type< std::size_t >()
Definition hdftype.hh:103
hid_t get_type< char >()
Definition hdftype.hh:123
hid_t get_type< float >()
Definition hdftype.hh:47
hid_t get_type< long long int >()
Definition hdftype.hh:85
hid_t get_type()
Definition hdftype.hh:39
hid_t get_type< unsigned short int >()
Definition hdftype.hh:97
hid_t get_type< bool >()
Definition hdftype.hh:117
hid_t get_type< short int >()
Definition hdftype.hh:73
hid_t get_type< int >()
Definition hdftype.hh:66
hid_t get_type< unsigned long long >()
Definition hdftype.hh:110
hid_t get_type< unsigned int >()
Definition hdftype.hh:91
hid_t get_type< long int >()
Definition hdftype.hh:79
hid_t get_type< long double >()
Definition hdftype.hh:60