h5gt 0.2.0
C++ wrapper for HDF5 library (based on HighFive project)
Loading...
Searching...
No Matches
H5Node_traits_misc.hpp
1/*
2 * Copyright (c), 2017, Adrien Devresse <adrien.devresse@epfl.ch>
3 *
4 * Distributed under the Boost Software License, Version 1.0.
5 * (See accompanying file LICENSE_1_0.txt or copy at
6 * http://www.boost.org/LICENSE_1_0.txt)
7 *
8 */
9#ifndef H5NODE_TRAITS_MISC_HPP
10#define H5NODE_TRAITS_MISC_HPP
11
12#include <string>
13#include <vector>
14
15#include <H5Apublic.h>
16#include <H5Dpublic.h>
17#include <H5Fpublic.h>
18#include <H5Gpublic.h>
19#include <H5Ppublic.h>
20#include <H5Tpublic.h>
21
22#include "../H5DataSet.hpp"
23#include "../H5File.hpp"
24#include "../H5Group.hpp"
25#include "../H5Selection.hpp"
26#include "../H5Utility.hpp"
27#include "../H5PropertyList.hpp"
28#include "H5DataSet_misc.hpp"
29#include "H5Iterables_misc.hpp"
30#include "H5Selection_misc.hpp"
31#include "H5Slice_traits_misc.hpp"
32#include "H5PropertyList_misc.hpp"
33
34namespace h5gt {
35
36
37template <typename Derivate>
38inline DataSet
39NodeTraits<Derivate>::createDataSet(const std::string& dataset_name,
40 const DataSpace& space,
41 const DataType& dtype,
42 const LinkCreateProps& linkCreateProps,
43 const DataSetCreateProps& dsetCreateProps,
44 const DataSetAccessProps& dsetAccessProps) {
45 DataSet ds{H5Dcreate2(static_cast<Derivate*>(this)->getId(false),
46 dataset_name.c_str(), dtype._hid, space._hid,
47 linkCreateProps.getId(false), dsetCreateProps.getId(false), dsetAccessProps.getId(false))};
48 if (ds._hid < 0) {
49 HDF5ErrMapper::ToException<DataSetException>(
50 std::string("Unable to create the dataset \"") + dataset_name +
51 "\":");
52 }
53 return ds;
54}
55
56template <typename Derivate>
57template<typename Type>
58inline DataSet
59NodeTraits<Derivate>::createDataSet(const std::string& dataset_name,
60 const DataSpace& space,
61 const LinkCreateProps& linkCreateProps,
62 const DataSetCreateProps& dsetCreateProps,
63 const DataSetAccessProps& dsetAccessProps)
64{
65 return createDataSet(dataset_name, space,
66 create_and_check_datatype<Type>(),
67 linkCreateProps, dsetCreateProps, dsetAccessProps);
68}
69
70template <typename Derivate>
71template <typename T>
72inline DataSet
73NodeTraits<Derivate>::createDataSet(const std::string& dataset_name,
74 const T& data,
75 const LinkCreateProps& linkCreateProps,
76 const DataSetCreateProps& dsetCreateProps,
77 const DataSetAccessProps& dsetAccessProps) {
78 DataSet ds = createDataSet(
79 dataset_name, DataSpace::From(data),
80 create_and_check_datatype<typename details::inspector<T>::base_type>(),
81 linkCreateProps, dsetCreateProps, dsetAccessProps);
82 ds.write(data);
83 return ds;
84}
85
86template <typename Derivate>
87template <std::size_t N>
88inline DataSet
89NodeTraits<Derivate>::createDataSet(const std::string& dataset_name,
90 const FixedLenStringArray<N>& data,
91 const LinkCreateProps& linkCreateProps,
92 const DataSetCreateProps& dsetCreateProps,
93 const DataSetAccessProps& dsetAccessProps) {
94 DataSet ds = createDataSet<char[N]>(
95 dataset_name, DataSpace(data.size()), linkCreateProps, dsetCreateProps, dsetAccessProps);
96 ds.write(data);
97 return ds;
98}
100template <typename Derivate>
101inline DataSet
102NodeTraits<Derivate>::getDataSet(const std::string& dataset_name,
103 const DataSetAccessProps& accessProps) const {
104 DataSet ds{H5Dopen2(static_cast<const Derivate*>(this)->getId(false),
105 dataset_name.c_str(), accessProps.getId(false))};
106 if (ds._hid < 0) {
107 HDF5ErrMapper::ToException<DataSetException>(
108 std::string("Unable to open the dataset \"") + dataset_name + "\":");
109 }
110 return ds;
111}
112
113template <typename Derivate>
115 const std::string& dtype_name,
116 const DataTypeAccessProps& dtypeAccessProps) const {
117 DataType dtype{H5Topen2(static_cast<const Derivate*>(this)->getId(false),
118 dtype_name.c_str(), dtypeAccessProps.getId(false))};
119 if (dtype._hid < 0) {
120 HDF5ErrMapper::ToException<DataSetException>(
121 std::string("Unable to open the datatype \"") + dtype_name + "\":");
122 }
123 return dtype;
124}
125
126template <typename Derivate>
127inline Group NodeTraits<Derivate>::createGroup(const std::string& group_name,
128 const LinkCreateProps& linkCreateProps,
129 const GroupCreateProps& groupCreateProps,
130 const GroupAccessProps& groupAccessProps) {
131 Group group{H5Gcreate2(static_cast<Derivate*>(this)->getId(false),
132 group_name.c_str(), linkCreateProps.getId(false), groupCreateProps.getId(false), groupAccessProps.getId(false))};
133 if (group._hid < 0) {
134 HDF5ErrMapper::ToException<GroupException>(
135 std::string("Unable to create the group \"") + group_name + "\":");
136 }
137 return group;
138}
139
140template <typename Derivate>
141inline Group
142NodeTraits<Derivate>::getGroup(const std::string& group_name,
143 const GroupAccessProps& groupAccessProps) const {
144 Group group{H5Gopen2(static_cast<const Derivate*>(this)->getId(false),
145 group_name.c_str(), groupAccessProps.getId(false))};
146 if (group._hid < 0) {
147 HDF5ErrMapper::ToException<GroupException>(
148 std::string("Unable to open the group \"") + group_name + "\":");
149 }
150 return group;
151}
152
153template <typename Derivate>
154inline File
156 hid_t fileId = H5Iget_file_id(static_cast<const Derivate*>(this)->getId(false));
157 if (!H5Iis_valid(fileId)){
158 HDF5ErrMapper::ToException<GroupException>(
159 std::string("File ID is invalid. Probably the object doesn't belong to any file"));
160 }
161 return File::FromId(fileId, false);
162}
163
164template <typename Derivate>
166 hsize_t res;
167 if (H5Gget_num_objs(static_cast<const Derivate*>(this)->getId(false), &res) < 0) {
168 HDF5ErrMapper::ToException<GroupException>(
169 std::string("Unable to count objects in existing group or file"));
170 }
171 return static_cast<size_t>(res);
172}
173
174template <typename Derivate>
175inline std::string NodeTraits<Derivate>::getObjectName(size_t index, const LinkAccessProps& linkAccessProps) const {
176 return details::get_name([&](char* buffer, hsize_t length) {
177 return H5Lget_name_by_idx(
178 static_cast<const Derivate*>(this)->getId(false), ".", H5_INDEX_NAME, H5_ITER_INC,
179 index, buffer, length, linkAccessProps.getId(false));
180 });
181}
182
183template <typename Derivate>
184inline LinkInfo NodeTraits<Derivate>::getLinkInfo(const std::string& objName) const {
185 return static_cast<const Derivate*>(this)->_getLinkInfo(objName);
186}
187
188template <typename Derivate>
189inline std::string NodeTraits<Derivate>::unpackSoftLink(const std::string& objName){
190 return static_cast<const Derivate*>(this)->_unpackSoftLink(objName);
192
193template <typename Derivate>
195 const std::string& objName, std::string& fileName_out){
196 return static_cast<const Derivate*>(this)->_unpackExternalLink(objName, fileName_out);
197}
198
199template <typename Derivate>
200inline bool NodeTraits<Derivate>::rename(const std::string& src_path,
201 const std::string& dst_path,
202 const LinkCreateProps& linkCreateProps,
203 const LinkAccessProps& linkAccessProps) const {
204 herr_t status = H5Lmove(static_cast<const Derivate*>(this)->getId(false), src_path.c_str(),
205 static_cast<const Derivate*>(this)->getId(false), dst_path.c_str(),
206 linkCreateProps.getId(false), linkAccessProps.getId(false));
207 if (status < 0) {
208 HDF5ErrMapper::ToException<GroupException>(
209 std::string("Unable to move link to \"") + dst_path + "\":");
210 return false;
211 }
212 return true;
213}
214
215template <typename Derivate>
216inline std::vector<std::string> NodeTraits<Derivate>::listObjectNames() const {
217
218 std::vector<std::string> names;
219 details::H5GTIterateData iterateData(names);
220
221 size_t num_objs = getNumberObjects();
222 names.reserve(num_objs);
224 if (H5Literate(static_cast<const Derivate*>(this)->getId(false), H5_INDEX_NAME,
225 H5_ITER_INC, NULL,
226 &details::internal_h5gt_iterate<H5L_info_t>,
227 static_cast<void*>(&iterateData)) < 0) {
228 HDF5ErrMapper::ToException<GroupException>(
229 std::string("Unable to list objects in group"));
230 }
231
232 return names;
233}
235template <typename Derivate>
236inline bool NodeTraits<Derivate>::_exist(const std::string& node_name,
237 const LinkAccessProps& accessProps,
238 bool raise_errors) const {
239 if (node_name.empty())
240 return false;
241
242 SilenceHDF5 silencer{!raise_errors};
243 const auto val = H5Lexists(static_cast<const Derivate*>(this)->getId(false),
244 node_name.c_str(), accessProps.getId(false));
245 if (val < 0) {
246 if (raise_errors) {
247 HDF5ErrMapper::ToException<GroupException>("Invalid link for exist()");
248 } else {
249 return false;
250 }
251 }
252
253 // The root path always exists, but H5Lexists return 0 or 1
254 // depending of the version of HDF5, so always return true for it
255 // We had to call H5Lexists anyway to check that there are no errors
256 return (node_name == "/") ? true : (val > 0);
257}
258
259template <typename Derivate>
260inline bool NodeTraits<Derivate>::_resolved(const std::string& node_name,
261 const LinkAccessProps& accessProps,
262 bool raise_errors) const {
263 if (node_name.empty())
264 return false;
265
266 SilenceHDF5 silencer{!raise_errors};
267 const auto val = H5Oexists_by_name(static_cast<const Derivate*>(this)->getId(false),
268 node_name.c_str(), accessProps.getId(false));
269 if (val < 0) {
270 if (raise_errors) {
271 HDF5ErrMapper::ToException<GroupException>("Invalid link for resolved()");
272 } else {
273 return false;
274 }
275 }
276
277 // The root path always exists, but H5Lexists return 0 or 1
278 // depending of the version of HDF5, so always return true for it
279 // We had to call H5Lexists anyway to check that there are no errors
280 return (node_name == "/") ? true : (val > 0);
281}
282
283template <typename Derivate>
284inline bool NodeTraits<Derivate>::exist(const std::string& objName,
285 const LinkAccessProps& linkAccessProps,
286 bool raise_errors) const {
287 // When there are slashes, first check everything is fine
288 // so that subsequent errors are only due to missing intermediate groups
289 if (objName.find('/') != std::string::npos) {
290 _exist("/", linkAccessProps); // Shall not throw under normal circumstances
291 // Unless "/" (already checked), verify path exists (not thowing errors)
292 return (objName == "/") ? true : _exist(objName, linkAccessProps, false);
293 }
294 return _exist(objName, linkAccessProps, raise_errors);
295}
296
297template <typename Derivate>
298inline bool NodeTraits<Derivate>::resolved(const std::string& objName,
299 const LinkAccessProps& linkAccessProps,
300 bool raise_errors) const {
301 // When there are slashes, first check everything is fine
302 // so that subsequent errors are only due to missing intermediate groups
303 if (objName.find('/') != std::string::npos) {
304 _resolved("/", linkAccessProps); // Shall not throw under normal circumstances
305 // Unless "/" (already checked), verify path exists (not thowing errors)
306 return (objName == "/") ? true : _resolved(objName, linkAccessProps, false);
307 }
308 return _resolved(objName, linkAccessProps, raise_errors);
309}
310
311template <typename Derivate>
312inline bool NodeTraits<Derivate>::existAndResolved(const std::string& objName,
313 const LinkAccessProps& linkAccessProps,
314 bool raise_errors) const {
315 if (!exist(objName, linkAccessProps, raise_errors))
316 return false;
317
318 if (!resolved(objName, linkAccessProps, raise_errors))
319 return false;
320
321 return true;
322}
323
324template <typename Derivate>
326 const std::string& objName, const ObjectType& objType,
327 const LinkAccessProps& linkAccessProps, bool raise_errors) const
328{
329 if (!existAndResolved(objName, linkAccessProps, raise_errors))
330 return false;
331
332 if (getObjectType(objName, linkAccessProps) != objType)
333 return false;
334
335 return true;
336}
337
338template <typename Derivate>
339inline void NodeTraits<Derivate>::unlink(const std::string& obj_name, const LinkAccessProps& linkAccessProps) const {
340 const herr_t val = H5Ldelete(static_cast<const Derivate*>(this)->getId(false),
341 obj_name.c_str(), linkAccessProps.getId(false));
342 if (val < 0) {
343 HDF5ErrMapper::ToException<GroupException>(
344 std::string("Invalid name for unlink() "));
345 }
346}
347
348template <typename Derivate>
349inline LinkType NodeTraits<Derivate>::getLinkType(const std::string& obj_name,
350 const LinkAccessProps& linkAccessProps) const {
351 H5L_info_t linkinfo;
352 if (H5Lget_info(static_cast<const Derivate*>(this)->getId(false),
353 obj_name.c_str(), &linkinfo, linkAccessProps.getId(false)) < 0
354 || linkinfo.type == H5L_TYPE_ERROR) {
355 HDF5ErrMapper::ToException<GroupException>(
356 std::string("Unable to obtain info for link ") + obj_name);
357 }
358 return _convert_link_type(linkinfo.type);
359}
360
361template <typename Derivate>
362inline ObjectType NodeTraits<Derivate>::getObjectType(const std::string& obj_name,
363 const LinkAccessProps& accessProps) const {
364 return _open(obj_name, accessProps).getObjectType();
365}
366
367template <typename Derivate>
369 const Group& obj, const std::string& objNewName,
370 const ObjectCopyProps& copyProps,
371 const LinkCreateProps& linkCreateProps,
372 const GroupAccessProps& groupAccessProps)
373{
374 _copy(obj, objNewName, copyProps, linkCreateProps);
375 return static_cast<const Derivate*>(this)->getGroup(
376 objNewName, groupAccessProps);
377}
378
379template <typename Derivate>
381 const DataSet& obj, const std::string& objNewName,
382 const ObjectCopyProps& copyProps,
383 const LinkCreateProps& linkCreateProps,
384 const DataSetAccessProps& dsetAccessProps)
385{
386 _copy(obj, objNewName, copyProps, linkCreateProps);
387 return static_cast<const Derivate*>(this)->getDataSet(
388 objNewName, dsetAccessProps);
389}
390
391template <typename Derivate>
393 const DataType& obj, const std::string& objNewName,
394 const ObjectCopyProps& copyProps,
395 const LinkCreateProps& linkCreateProps,
396 const DataTypeAccessProps& dtypeAccessProps)
397{
398 _copy(obj, objNewName, copyProps, linkCreateProps);
399 return static_cast<const Derivate*>(this)->getDataType(
400 objNewName, dtypeAccessProps);
401}
402
403template <typename Derivate>
404template<typename Node,
405 typename std::enable_if<
406 std::is_same<Node, File>::value |
407 std::is_same<Node, Group>::value>::type*>
409 const Node& target,
410 const std::string& linkName,
411 const LinkType& linkType,
412 const std::string& targetPath,
413 const LinkCreateProps& linkCreateProps,
414 const LinkAccessProps& linkAccessProps,
415 const GroupAccessProps& groupAccessProps)
416{
417 _createLink(target, linkName, linkType, targetPath, linkCreateProps, linkAccessProps);
418 return static_cast<const Derivate*>(this)->getGroup(
419 linkName, groupAccessProps);
420}
421
422template <typename Derivate>
423inline DataSet NodeTraits<Derivate>::createLink(
424 const DataSet& target,
425 const std::string& linkName,
426 const LinkType& linkType,
427 const std::string& targetPath,
428 const LinkCreateProps& linkCreateProps,
429 const LinkAccessProps& linkAccessProps,
430 const DataSetAccessProps& dsetAccessProps)
431{
432 _createLink(target, linkName, linkType, targetPath, linkCreateProps, linkAccessProps);
433 return static_cast<const Derivate*>(this)->getDataSet(linkName, dsetAccessProps);
434}
435
436template <typename Derivate>
437inline DataType NodeTraits<Derivate>::createLink(
438 const DataType& target,
439 const std::string& linkName,
440 const LinkType& linkType,
441 const std::string& targetPath,
442 const LinkCreateProps& linkCreateProps,
443 const LinkAccessProps& linkAccessProps,
444 const DataTypeAccessProps& dtypeAccessProps)
445{
446 _createLink(target, linkName, linkType, targetPath, linkCreateProps, linkAccessProps);
447 return static_cast<const Derivate*>(this)->getDataType(linkName, dtypeAccessProps);
448}
449
450
451template <typename Derivate>
452inline Object NodeTraits<Derivate>::_open(const std::string& node_name,
453 const LinkAccessProps& accessProps) const {
454 hid_t id = H5Oopen(static_cast<const Derivate*>(this)->getId(false),
455 node_name.c_str(),
456 accessProps.getId(false));
457 if (id < 0) {
458 HDF5ErrMapper::ToException<GroupException>(
459 std::string("Unable to open \"") + node_name + "\":");
460 }
461 return Object(id);
462}
463
464template <typename Derivate>
465template<typename T>
466inline void NodeTraits<Derivate>::_copy(
467 const T& obj, const std::string& newName,
468 const ObjectCopyProps& copyProps,
469 const LinkCreateProps& linkCreateProps)
470{
471 hid_t fileId = H5Iget_file_id(obj.getId(false));
472 bool closeFileId = true;
473 if (!H5Iis_valid(fileId)){
474 closeFileId = false;
475 HDF5ErrMapper::ToException<GroupException>(
476 std::string("File ID is invalid. Probably the object doesn't belong to any file"));
477 }
478
479 herr_t status = H5Ocopy(
480 fileId, obj.getPath().c_str(),
481 static_cast<const Derivate*>(this)->getId(false), newName.c_str(),
482 copyProps.getId(false), linkCreateProps.getId(false));
483
484 if (status < 0) {
485 HDF5ErrMapper::ToException<GroupException>(
486 std::string("Unable to copy object to \"") + newName + "\":");
487 }
488
489 // important: close opened File ID
490 if (closeFileId){
491 H5Idec_ref(fileId);
492 }
493}
494
495template <typename Derivate>
496template <typename T>
497inline void NodeTraits<Derivate>::_createLink(
498 T& target,
499 const std::string& linkName,
500 const LinkType& linkType,
501 std::string targetPath,
502 const LinkCreateProps& linkCreateProps,
503 const LinkAccessProps& linkAccessProps)
504{
505 herr_t status = -1;
506 if (targetPath.empty())
507 targetPath = target.getPath();
508
509 if (linkType == LinkType::Soft){
510 status = H5Lcreate_soft(
511 targetPath.c_str(),
512 static_cast<const Derivate*>(this)->getId(false),
513 linkName.c_str(), linkCreateProps.getId(false), linkAccessProps.getId(false));
514 } else if (linkType == LinkType::Hard){
515 status = H5Lcreate_hard(
516 target.getId(false),
517 targetPath.c_str(),
518 static_cast<const Derivate*>(this)->getId(false),
519 linkName.c_str(), linkCreateProps.getId(false), linkAccessProps.getId(false));
520 } else if (linkType == LinkType::External){
521 status = H5Lcreate_external(
522 target.getFileName().c_str(),
523 targetPath.c_str(),
524 static_cast<const Derivate*>(this)->getId(false),
525 linkName.c_str(), linkCreateProps.getId(false), linkAccessProps.getId(false));
526 }
527
528 if (status < 0) {
529 HDF5ErrMapper::ToException<GroupException>(
530 std::string("Unable to create link"));
531 }
532}
533
534
535} // namespace h5gt
536
537#endif // H5NODE_TRAITS_MISC_HPP
Definition H5PropertyList.hpp:255
Definition H5PropertyList.hpp:171
Class representing a dataset.
Definition H5DataSet.hpp:28
Class representing the space (dimensions) of a dataset.
Definition H5DataSpace.hpp:37
static DataSpace From(const T &value)
Create a dataspace matching a type accepted by details::inspector.
Definition H5Dataspace_misc.hpp:137
Definition H5PropertyList.hpp:295
HDF5 Data Type.
Definition H5DataType.hpp:48
File class.
Definition H5File.hpp:25
A structure representing a set of fixed-length strings.
Definition H5DataType.hpp:305
Definition H5PropertyList.hpp:162
Definition H5PropertyList.hpp:157
Represents an hdf5 group.
Definition H5Group.hpp:23
NodeTraits: Base class for Group and File.
Definition H5Node_traits.hpp:23
std::string unpackExternalLink(const std::string &objName, std::string &fileName_out)
unpackExternalLink retrieve target path object path and file path
Definition H5Node_traits_misc.hpp:194
DataSet createDataSet(const std::string &dataset_name, const DataSpace &space, const DataType &type, const LinkCreateProps &linkCreateProps=LinkCreateProps(), const DataSetCreateProps &dsetCreateProps=DataSetCreateProps(), const DataSetAccessProps &dsetAccessProps=DataSetAccessProps())
createDataSet Create a new dataset in the current file of datatype type and of size space
Definition H5Node_traits_misc.hpp:39
void unlink(const std::string &obj_name, const LinkAccessProps &linkAccessProps=LinkAccessProps()) const
unlink the given dataset or group
Definition H5Node_traits_misc.hpp:339
std::string getObjectName(size_t index, const LinkAccessProps &linkAccessProps=LinkAccessProps()) const
return the name of the object with the given index
Definition H5Node_traits_misc.hpp:175
size_t getNumberObjects() const
return the number of leaf objects of the node / group
Definition H5Node_traits_misc.hpp:165
ObjectType getObjectType(const std::string &obj_name, const LinkAccessProps &accessProps=LinkAccessProps()) const
A shorthand to get the kind of object pointed to (group, dataset, type...)
Definition H5Node_traits_misc.hpp:362
std::string unpackSoftLink(const std::string &objName)
unpackSoftLink retrieve target path object path
Definition H5Node_traits_misc.hpp:189
bool existAndResolved(const std::string &obj_name, const LinkAccessProps &linkAccessProps=LinkAccessProps(), bool raise_errors=false) const
existAndResolved invokes exist() and then reoslved()
Definition H5Node_traits_misc.hpp:312
bool resolved(const std::string &obj_name, const LinkAccessProps &linkAccessProps=LinkAccessProps(), bool raise_errors=false) const
resolved Hard links always resolved but Soft/External links may point to unexistant objects
Definition H5Node_traits_misc.hpp:298
Group copy(const Group &obj, const std::string &objNewName, const ObjectCopyProps &copyProps=ObjectCopyProps(), const LinkCreateProps &linkCreateProps=LinkCreateProps(), const GroupAccessProps &groupAccessProps=GroupAccessProps())
Copies specified object to the new destination (this File/Group) under new name. The destination must...
Definition H5Node_traits_misc.hpp:368
bool rename(const std::string &src_path, const std::string &dest_path, const LinkCreateProps &linkCreateProps=LinkCreateProps(), const LinkAccessProps &linkAccessProps=LinkAccessProps()) const
moves an object and its content within an HDF5 file.
Definition H5Node_traits_misc.hpp:200
Group getGroup(const std::string &group_name, const GroupAccessProps &groupAccessProps=GroupAccessProps()) const
open an existing group with the name group_name
Definition H5Node_traits_misc.hpp:142
LinkType getLinkType(const std::string &obj_name, const LinkAccessProps &linkAccessProps=LinkAccessProps()) const
Returns the kind of link of the given name (soft, hard...)
Definition H5Node_traits_misc.hpp:349
std::vector< std::string > listObjectNames() const
list all leaf objects name of the node / group
Definition H5Node_traits_misc.hpp:216
DataSet getDataSet(const std::string &dataset_name, const DataSetAccessProps &accessProps=DataSetAccessProps()) const
get an existing dataset in the current file
Definition H5Node_traits_misc.hpp:102
bool exist(const std::string &obj_name, const LinkAccessProps &linkAccessProps=LinkAccessProps(), bool raise_errors=false) const
check a dataset or group exists in the current node / group
Definition H5Node_traits_misc.hpp:284
Group createGroup(const std::string &group_name, const LinkCreateProps &linkCreateProps=LinkCreateProps(), const GroupCreateProps &groupCreateProps=GroupCreateProps(), const GroupAccessProps &groupAccessProps=GroupAccessProps())
create a new group, and eventually intermediate groups
Definition H5Node_traits_misc.hpp:127
Definition H5PropertyList.hpp:305
Utility class to disable HDF5 stack printing inside a scope.
Definition H5Utility.hpp:20
void write(const T &buffer)
Definition H5Slice_traits_misc.hpp:275
Definition H5Iterables_misc.hpp:24