Nektar++
Loading...
Searching...
No Matches
H5.h
Go to the documentation of this file.
1///////////////////////////////////////////////////////////////////////////////
2//
3// File: H5.h
4//
5// For more information, please see: http://www.nektar.info
6//
7// The MIT License
8//
9// Copyright (c) 2006 Division of Applied Mathematics, Brown University (USA),
10// Department of Aeronautics, Imperial College London (UK), and Scientific
11// Computing and Imaging Institute, University of Utah (USA).
12//
13// Permission is hereby granted, free of charge, to any person obtaining a
14// copy of this software and associated documentation files (the "Software"),
15// to deal in the Software without restriction, including without limitation
16// the rights to use, copy, modify, merge, publish, distribute, sublicense,
17// and/or sell copies of the Software, and to permit persons to whom the
18// Software is furnished to do so, subject to the following conditions:
19//
20// The above copyright notice and this permission notice shall be included
21// in all copies or substantial portions of the Software.
22//
23// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29// DEALINGS IN THE SOFTWARE.
30//
31// Description: Simple OO wrapper around HDF5
32//
33///////////////////////////////////////////////////////////////////////////////
34
35#ifndef NEKTAR_LIB_UTILITIES_BASIC_UTILS_H5_H
36#define NEKTAR_LIB_UTILITIES_BASIC_UTILS_H5_H
37
38#include <exception>
39#include <hdf5.h>
40#include <memory>
41#include <string>
42#include <vector>
43
46
48{
49
50#define H5_CONSTRUCT(ans, func, args) \
51 { \
52 hid_t ret = func args; \
53 if (ret < 0) \
54 ErrorUtil::Error(ErrorUtil::efatal, __FILE__, __LINE__, \
55 "HDF5 error in API function " #func, 0); \
56 ans = ret; \
57 }
58#define H5_CALL(func, args) \
59 { \
60 herr_t ret = func args; \
61 if (ret < 0) \
62 ErrorUtil::Error(ErrorUtil::efatal, __FILE__, __LINE__, \
63 "HDF5 error in API function " #func, 0); \
64 }
65
66class Error : public std::exception
67{
68};
69
70// Forward declare
71class Object;
72typedef std::shared_ptr<Object> ObjectSharedPtr;
73class DataType;
74typedef std::shared_ptr<DataType> DataTypeSharedPtr;
76typedef std::shared_ptr<CompoundDataType> CompoundDataTypeSharedPtr;
77class DataSpace;
78typedef std::shared_ptr<DataSpace> DataSpaceSharedPtr;
80typedef std::shared_ptr<CanHaveAttributes> CanHaveAttributesSharedPtr;
81class Attribute;
82typedef std::shared_ptr<Attribute> AttributeSharedPtr;
84typedef std::shared_ptr<CanHaveGroupsDataSets> CanHaveGroupsDataSetsSharedPtr;
85class Group;
86typedef std::shared_ptr<Group> GroupSharedPtr;
87class File;
88typedef std::shared_ptr<File> FileSharedPtr;
89class DataSet;
90typedef std::shared_ptr<DataSet> DataSetSharedPtr;
91class PList;
92typedef std::shared_ptr<PList> PListSharedPtr;
93
94/// HDF5 base class
95class Object : public std::enable_shared_from_this<Object>
96{
97public:
98 void Close()
99 {
100 v_Close();
101 }
102 inline hid_t GetId() const
103 {
104 return m_Id;
105 }
106 // Overload cast to the HDF5 ID type to make objects
107 // transparently usable in the HDF5 API.
108 inline operator hid_t() const
109 {
110 return GetId();
111 }
112
113protected:
117 hid_t m_Id;
118 LIB_UTILITIES_EXPORT virtual void v_Close() = 0;
119};
120
121// PropertyList objects
122class PList : public Object
123{
124public:
125 /// Default options
127 /// Properties for object creation
129 /// Properties for file creation
131 /// Properties for file access
133 /// Properties for dataset creation
135 /// Properties for dataset access
137 /// Properties for raw data transfer
139 /// Properties for file mounting
141 /// Properties for group creation
143 /// Properties for group access
145 /// Properties for datatype creation
147 /// Properties for datatype access
149 /// Properties for character encoding when encoding strings or object names
151 /// Properties for attribute creation
153 /// Properties governing the object copying process
155 /// Properties governing link creation
157 /// Properties governing link traversal when accessing objects
159
161 LIB_UTILITIES_EXPORT ~PList() override;
162 LIB_UTILITIES_EXPORT void SetChunk(const std::vector<hsize_t> &dims);
163 LIB_UTILITIES_EXPORT void SetDeflate(const unsigned level = 1);
167
168protected:
169 LIB_UTILITIES_EXPORT void v_Close() override;
170
171private:
172 PList(hid_t cls);
173};
174
175/// Mixin for objects that contain groups and datasets (Group and File)
176class CanHaveGroupsDataSets : public virtual Object
177{
178public:
180 {
181 public:
183 hsize_t idx = 0);
184 LIB_UTILITIES_EXPORT const std::string &operator*();
186 LIB_UTILITIES_EXPORT bool operator==(const LinkIterator &other) const;
187 inline bool operator!=(const LinkIterator &other) const
188 {
189 return !(*this == other);
190 }
191 inline hsize_t GetPos() const
192 {
193 return m_idx;
194 }
195
196 inline std::string GetName() const
197 {
198 return m_currentName;
199 }
200
201 private:
202 LIB_UTILITIES_EXPORT static herr_t helper(hid_t g_id, const char *name,
203 const H5L_info_t *info,
204 void *op_data);
206 hsize_t m_idx;
207 hsize_t m_next;
208 hsize_t m_size;
209 std::string m_currentName;
210 };
211
212 // Create a group with the given name. The createPL can be
213 // omitted to use the default properties.
215 const std::string &name, PListSharedPtr createPL = PList::Default(),
216 PListSharedPtr accessPL = PList::Default());
217
218 // Create a dataset with the name, type and space.
219 // The createPL can be omitted to use the defaults.
221 const std::string &name, DataTypeSharedPtr type,
223 PListSharedPtr accessPL = PList::Default());
224
225 // Create a dataset containing the data supplied
226 // The createPL can be omitted to use the defaults
227 template <class T>
229 const std::string &name, const std::vector<T> &data,
230 PListSharedPtr createPL = PList::Default(),
231 PListSharedPtr accessPL = PList::Default());
232
233 // Open an existing group.
234 // The accessPL can be omitted to use the defaults
236 OpenGroup(const std::string &name,
237 PListSharedPtr accessPL = PList::Default()) const;
238
239 // Open an existing dataset
240 // The accessPL can be omitted to use the defaults
242 OpenDataSet(const std::string &name,
243 PListSharedPtr accessPL = PList::Default()) const;
244
245 LIB_UTILITIES_EXPORT bool ContainsDataSet(std::string nm);
246
248 {
249 return v_GetNumElements();
250 }
251
252protected:
256
257 friend class key_iterator;
258};
259
260/// Mixin for objects that can have attributes (Group, DataSet, DataType)
261class CanHaveAttributes : public virtual Object
262{
263public:
265 {
266 public:
268 hsize_t idx = 0);
269 LIB_UTILITIES_EXPORT const std::string &operator*();
271 LIB_UTILITIES_EXPORT bool operator==(const AttrIterator &other) const;
272 inline bool operator!=(const AttrIterator &other) const
273 {
274 return !(*this == other);
275 }
276 inline hsize_t GetPos() const
277 {
278 return m_idx;
279 }
280
281 private:
282 static herr_t helper(hid_t g_id, const char *name,
283 const H5A_info_t *info, void *op_data);
285 hsize_t m_idx;
286 hsize_t m_next;
287 hsize_t m_size;
288 std::string m_currentName;
289 };
290
292 CreateAttribute(const std::string &name, DataTypeSharedPtr type,
293 DataSpaceSharedPtr space);
295 OpenAttribute(const std::string &name);
296
297 template <class T>
298 void SetAttribute(const std::string &name, const T &value);
299 template <class T>
300 void SetAttribute(const std::string &name, const std::vector<T> &value);
301
302 template <class T> void GetAttribute(const std::string &name, T &value);
303 template <class T>
304 void GetAttribute(const std::string &name, std::vector<T> &value);
305
309};
310
311/// HDF5 DataSpace wrapper
312class DataSpace : public Object
313{
314public:
317 LIB_UTILITIES_EXPORT static DataSpaceSharedPtr OneD(hsize_t size);
318
320 LIB_UTILITIES_EXPORT DataSpace(hsize_t size,
321 hsize_t max = H5S_UNLIMITED - 1);
322 LIB_UTILITIES_EXPORT DataSpace(const std::vector<hsize_t> &dims);
323 LIB_UTILITIES_EXPORT DataSpace(const std::vector<hsize_t> &dims,
324 const std::vector<hsize_t> &max_dims);
326
327 LIB_UTILITIES_EXPORT void SelectRange(const hsize_t start,
328 const hsize_t count);
329 LIB_UTILITIES_EXPORT void AppendRange(const hsize_t start,
330 const hsize_t count);
331
332 LIB_UTILITIES_EXPORT void SelectRange(const std::vector<hsize_t> start,
333 const std::vector<hsize_t> count);
334 LIB_UTILITIES_EXPORT void AppendRange(const std::vector<hsize_t> start,
335 const std::vector<hsize_t> count);
336
337 LIB_UTILITIES_EXPORT void SetSelection(const hsize_t num_elmt,
338 const std::vector<hsize_t> &coords);
339
341
343 LIB_UTILITIES_EXPORT std::vector<hsize_t> GetDims();
344
345protected:
346 LIB_UTILITIES_EXPORT void v_Close() override;
347
348private:
349 DataSpace(hid_t id);
350 friend class Attribute;
351 friend class DataSet;
352};
353
354// Policy class for the DataTypesTraits controlling whether data
355// has to be converted in anyway before writing. (It could perhaps
356// be DataTypeTraitsTraits but that's too horrible a name.)
357//
358// Default policy is to not convert at all.
359template <class T> struct DataTypeConversionPolicy
360{
361 static const bool MustConvert = false;
362 typedef T ConvertedType;
364 static ConvertedType Convert(const T &obj);
365 static T Deconvert(const ConvertedType &obj);
366};
367
368/// Traits class for HDF5 data types.
369template <class T> struct DataTypeTraits
370{
372
373 /***
374 * Define this for a specialision for any HDF5 NATIVE type you want to use.
375 * See http://hdfgroup.org/HDF5/doc/UG/UG_frame11Datatypes.html
376 */
378
380
381 static ConvertedType Convert(const T &obj);
382 static T Deconvert(const ConvertedType &obj);
383 /**
384 * Get the address of the start of the data.
385 * Default implementation just uses "&"
386 */
387 static const void *GetAddress(const ConvertedType &obj);
388 static void *GetAddress(ConvertedType &obj);
389 /**
390 * Return a DataType object representing T.
391 * Default implementation just calls PredefinedDataType::Native<T>()
392 */
393 static DataTypeSharedPtr GetType();
394 static DataTypeSharedPtr GetType(const T &obj);
395};
396
397/// Wrap and HDF5 data type object. Technically this can have attributes, but
398/// not really bothered.
399class DataType : public Object
400{
401public:
402 LIB_UTILITIES_EXPORT static DataTypeSharedPtr String(size_t len = 0);
403 template <class T>
404 static DataTypeSharedPtr OfObject([[maybe_unused]] const T &obj)
405 {
407 }
409
410protected:
411 LIB_UTILITIES_EXPORT void v_Close() override;
413};
414
416{
417public:
419
420 void Add(std::string name, size_t offset, hid_t type)
421 {
422 H5Tinsert(m_Id, name.c_str(), offset, type);
423 }
424 void AddString(std::string name, size_t offset, size_t size)
425 {
426 hid_t strtype = H5Tcopy(H5T_C_S1);
427 H5Tset_size(strtype, size);
428 H5Tinsert(m_Id, name.c_str(), offset, strtype);
429 }
430
431protected:
432 LIB_UTILITIES_EXPORT void v_Close() override;
433
434private:
435 CompoundDataType(hid_t);
436};
437
438/// Predefined HDF data types that must not be closed when done with.
440{
441public:
442 template <class T> static DataTypeSharedPtr Native();
444
445protected:
446 LIB_UTILITIES_EXPORT void v_Close() override;
447
448private:
450};
451
452/// HDF5 Attribute Wrapper
453class Attribute : public Object
454{
455public:
458
459protected:
460 LIB_UTILITIES_EXPORT void v_Close() override;
461
462private:
463 Attribute(hid_t id) : Object(id)
464 {
465 }
466 static AttributeSharedPtr Create(hid_t parent, const std::string &name,
468 DataSpaceSharedPtr space);
469 static AttributeSharedPtr Open(hid_t parent, const std::string &name);
470 friend class CanHaveAttributes;
471};
472
473/// HDF5 file wrapper
475{
476public:
478 const std::string &filename, unsigned mode,
479 PListSharedPtr createPL = PList::Default(),
480 PListSharedPtr accessPL = PList::Default());
482 const std::string &filename, unsigned mode,
483 PListSharedPtr accessPL = PList::Default());
484 LIB_UTILITIES_EXPORT ~File() override;
485
486protected:
487 LIB_UTILITIES_EXPORT void v_Close() override;
488 LIB_UTILITIES_EXPORT hsize_t v_GetNumElements() override;
489
490private:
491 File(hid_t id);
492};
493
494/// HDF5 Group wrapper
496{
497public:
498 LIB_UTILITIES_EXPORT ~Group() override;
499 LIB_UTILITIES_EXPORT std::vector<std::string> GetElementNames();
502 operator[](const std::string &key);
503
504protected:
505 LIB_UTILITIES_EXPORT void v_Close() override;
506 LIB_UTILITIES_EXPORT hsize_t v_GetNumElements() override;
507
508private:
509 Group(hid_t id);
511};
512
514{
515public:
518
519 template <class T> void Write(const std::vector<T> &data)
520 {
522 H5_CALL(H5Dwrite, (m_Id, mem_t->GetId(), H5S_ALL, H5S_ALL, H5P_DEFAULT,
523 &data[0]));
524 }
525 template <class T>
526 void Write(const std::vector<T> &data, DataSpaceSharedPtr filespace,
528 {
530 DataSpaceSharedPtr memspace = DataSpace::OneD(data.size());
531
532 H5_CALL(H5Dwrite, (m_Id, mem_t->GetId(), memspace->GetId(),
533 filespace->GetId(), dxpl->GetId(), &data[0]));
534 }
535
536 template <class T>
537 void Write(const std::vector<T> &data, DataSpaceSharedPtr filespace,
539 {
540 DataSpaceSharedPtr memspace = DataSpace::OneD(data.size());
541
542 H5Dwrite(m_Id, dt->GetId(), memspace->GetId(), filespace->GetId(),
543 dxpl->GetId(), &data[0]);
544 }
545
546 void WriteString(std::string s, DataSpaceSharedPtr filespace,
549 {
550 H5_CALL(H5Dwrite, (m_Id, type->GetId(), H5S_ALL, filespace->GetId(),
551 dxpl->GetId(), s.c_str()));
552 }
553
554 void WriteVectorString(std::vector<std::string> s,
557 {
558 const char **ret;
559 ret = new const char *[s.size()];
560 for (size_t i = 0; i < s.size(); ++i)
561 {
562 ret[i] = s[i].c_str();
563 }
564 H5Dwrite(m_Id, type->GetId(), H5S_ALL, filespace->GetId(),
565 dxpl->GetId(), ret);
566 }
567
568 template <class T> void Read(std::vector<T> &data)
569 {
572 ASSERTL0(H5Sget_simple_extent_ndims(space->GetId()) == 1,
573 "vector data not 1D");
574 hsize_t len, maxdim;
575 H5Sget_simple_extent_dims(space->GetId(), &len, &maxdim);
576
577 data.resize(len);
578
579 H5_CALL(H5Dread, (m_Id, mem_t->GetId(), H5S_ALL, H5S_ALL, H5P_DEFAULT,
580 data.data()));
581 }
582 template <class T>
583 void Read(std::vector<T> &data, DataSpaceSharedPtr filespace,
585 {
587 hsize_t len;
588 len = H5Sget_select_npoints(filespace->GetId());
589
590 data.resize(len);
591
592 DataSpaceSharedPtr memspace = DataSpace::OneD(len);
593 H5_CALL(H5Dread, (m_Id, mem_t->GetId(), memspace->GetId(),
594 filespace->GetId(), dxpl->GetId(), data.data()));
595 }
596 template <class T>
597 void Read(std::vector<T> &data, DataSpaceSharedPtr filespace,
598 std::vector<std::vector<int>> &coords,
600 {
602 hsize_t len;
603
604 int w = coords[0].size();
605
606 hsize_t *cds = new hsize_t[coords.size() * w];
607 for (int i = 0; i < coords.size(); i++)
608 {
609 for (int j = 0; j < coords[i].size(); j++)
610 {
611 cds[i * w + j] = hsize_t(coords[i][j]);
612 }
613 }
614
615 H5Sselect_elements(filespace->GetId(), H5S_SELECT_SET, coords.size(),
616 cds);
617
618 delete[] cds;
619
620 len = H5Sget_select_npoints(filespace->GetId());
621 DataSpaceSharedPtr memspace = DataSpace::OneD(len);
622
623 data.resize(len);
624
625 H5_CALL(H5Dread, (m_Id, mem_t->GetId(), memspace->GetId(),
626 filespace->GetId(), dxpl->GetId(), data.data()));
627
628 H5Sselect_all(filespace->GetId());
629 }
630
631 void ReadVectorString(std::vector<std::string> &data,
632 DataSpaceSharedPtr filespace,
634 {
635 char **rdata;
637 std::vector<hsize_t> dims = filespace->GetDims();
638 rdata = (char **)malloc(dims[0] * sizeof(char *));
639
640 H5_CALL(H5Dread, (m_Id, tp->GetId(), H5S_ALL, filespace->GetId(),
641 dxpl->GetId(), rdata));
642
643 for (int i = 0; i < dims[0]; i++)
644 {
645 data.push_back(std::string(rdata[i]));
646 }
647 free(rdata);
648 }
649
650protected:
651 LIB_UTILITIES_EXPORT void v_Close() override;
652
653private:
654 DataSet(hid_t id);
656};
657
658template <class T>
660 T>::Convert(const T &obj)
661{
662 return obj;
663}
664
665template <class T>
668{
669 return obj;
670}
671
673{
674 return PredefinedDataType::Native<T>();
675}
676
677template <class T>
680{
681 return &obj;
682}
683
684template <class T>
686{
687 return &obj;
688}
689
690template <class T>
692 const T &obj)
693{
694 return Converter::Convert(obj);
695}
696
697template <class T>
699 const typename DataTypeTraits<T>::ConvertedType &obj)
700{
701 return Converter::Deconvert(obj);
702}
703template <> struct DataTypeConversionPolicy<std::string>
704{
705 static const bool MustConvert = true;
706 typedef const char *ConvertedType;
707 typedef const char *ConvertedVectorElemType;
708 inline static ConvertedType Convert(const std::string &obj)
709 {
710 return obj.c_str();
711 }
712 inline static std::string Deconvert(const ConvertedType &obj)
713 {
714 return std::string(obj);
715 }
716};
717
722
728
729template <typename T>
730void CanHaveAttributes::SetAttribute(const std::string &name, const T &value)
731{
734 AttributeSharedPtr attr = CreateAttribute(name, type, space);
735
738 H5_CALL(H5Awrite, (attr->GetId(), type->GetId(),
740}
741
742template <typename T>
743void CanHaveAttributes::SetAttribute(const std::string &name,
744 const std::vector<T> &value)
745{
746 typedef std::vector<
748 Vec;
749 Vec converted_vals;
751 DataSpaceSharedPtr space = DataSpace::OneD(value.size());
752 AttributeSharedPtr attr = CreateAttribute(name, type, space);
753
754 const void *converted_buf = nullptr;
756 {
757 converted_vals.resize(value.size());
758 for (size_t i = 0; i < value.size(); ++i)
759 {
760 converted_vals[i] = DataTypeConversionPolicy<T>::Convert(value[i]);
761 }
762 converted_buf = &converted_vals[0];
763 }
764 else
765 {
766 converted_buf = &value[0];
767 }
768
769 H5_CALL(H5Awrite, (attr->GetId(), type->GetId(), converted_buf));
770}
771
772template <typename T>
773void CanHaveAttributes::GetAttribute(const std::string &name, T &value)
774{
778
780
781 H5_CALL(H5Aread, (attr->GetId(), type->GetId(),
783 value = DataTypeTraits<T>::Deconvert(conv);
784}
785
786template <typename T>
787void CanHaveAttributes::GetAttribute(const std::string &name,
788 std::vector<T> &value)
789{
790 typedef std::vector<
792 Vec;
793 Vec converted_vals;
796 DataSpaceSharedPtr space = attr->GetSpace();
797 ASSERTL0(H5Sget_simple_extent_ndims(space->GetId()) == 1,
798 "vector data not 1D");
799 hsize_t len, maxdim;
800 H5Sget_simple_extent_dims(space->GetId(), &len, &maxdim);
801
802 value.resize(len);
803 void *converted_buf = nullptr;
805 {
806 converted_vals.resize(len);
807 converted_buf = &converted_vals[0];
808 }
809 else
810 {
811 converted_buf = &value[0];
812 }
813
814 H5_CALL(H5Aread, (attr->GetId(), type->GetId(), converted_buf));
815
817 {
818 typename Vec::iterator src = converted_vals.begin(),
819 end = converted_vals.end();
820 typename std::vector<T>::iterator dest = value.begin();
821 for (; src != end; ++src, ++dest)
822 {
823 *dest = DataTypeTraits<T>::Deconvert(*src);
824 }
825 }
826}
827
828template <class T>
830 const std::string &name, const std::vector<T> &data,
831 PListSharedPtr createPL, PListSharedPtr accessPL)
832{
834 DataSpaceSharedPtr space = DataSpace::OneD(data.size());
835 DataSetSharedPtr dataset =
836 CreateDataSet(name, type, space, createPL, accessPL);
837 dataset->Write(data);
838 return dataset;
839}
840} // namespace Nektar::LibUtilities::H5
841
842#endif
#define ASSERTL0(condition, msg)
#define H5_CALL(func, args)
Definition H5.h:58
#define LIB_UTILITIES_EXPORT
HDF5 Attribute Wrapper.
Definition H5.h:454
static AttributeSharedPtr Open(hid_t parent, const std::string &name)
Definition H5.cpp:613
DataSpaceSharedPtr GetSpace() const
Definition H5.cpp:630
static AttributeSharedPtr Create(hid_t parent, const std::string &name, DataTypeSharedPtr type, DataSpaceSharedPtr space)
Definition H5.cpp:602
bool operator==(const AttrIterator &other) const
Definition H5.cpp:382
static herr_t helper(hid_t g_id, const char *name, const H5A_info_t *info, void *op_data)
Definition H5.cpp:388
bool operator!=(const AttrIterator &other) const
Definition H5.h:272
Mixin for objects that can have attributes (Group, DataSet, DataType)
Definition H5.h:262
AttributeSharedPtr OpenAttribute(const std::string &name)
Definition H5.cpp:334
void GetAttribute(const std::string &name, T &value)
Definition H5.h:773
AttributeSharedPtr CreateAttribute(const std::string &name, DataTypeSharedPtr type, DataSpaceSharedPtr space)
Definition H5.cpp:327
void SetAttribute(const std::string &name, const T &value)
Definition H5.h:730
Mixin for objects that contain groups and datasets (Group and File)
Definition H5.h:177
GroupSharedPtr OpenGroup(const std::string &name, PListSharedPtr accessPL=PList::Default()) const
Definition H5.cpp:242
DataSetSharedPtr OpenDataSet(const std::string &name, PListSharedPtr accessPL=PList::Default()) const
Definition H5.cpp:253
GroupSharedPtr CreateGroup(const std::string &name, PListSharedPtr createPL=PList::Default(), PListSharedPtr accessPL=PList::Default())
Definition H5.cpp:213
DataSetSharedPtr CreateDataSet(const std::string &name, DataTypeSharedPtr type, DataSpaceSharedPtr space, PListSharedPtr createPL=PList::Default(), PListSharedPtr accessPL=PList::Default())
Definition H5.cpp:225
DataSetSharedPtr CreateWriteDataSet(const std::string &name, const std::vector< T > &data, PListSharedPtr createPL=PList::Default(), PListSharedPtr accessPL=PList::Default())
Definition H5.h:829
void AddString(std::string name, size_t offset, size_t size)
Definition H5.h:424
static CompoundDataTypeSharedPtr Create(size_t sz)
Definition H5.cpp:554
void Add(std::string name, size_t offset, hid_t type)
Definition H5.h:420
void Read(std::vector< T > &data)
Definition H5.h:568
void Write(const std::vector< T > &data, DataSpaceSharedPtr filespace, PListSharedPtr dxpl=PList::Default())
Definition H5.h:526
void ReadVectorString(std::vector< std::string > &data, DataSpaceSharedPtr filespace, PListSharedPtr dxpl=PList::Default())
Definition H5.h:631
void WriteString(std::string s, DataSpaceSharedPtr filespace, DataTypeSharedPtr type, PListSharedPtr dxpl=PList::Default())
Definition H5.h:546
void Read(std::vector< T > &data, DataSpaceSharedPtr filespace, std::vector< std::vector< int > > &coords, PListSharedPtr dxpl=PList::Default())
Definition H5.h:597
DataSpaceSharedPtr GetSpace() const
Definition H5.cpp:725
void Read(std::vector< T > &data, DataSpaceSharedPtr filespace, PListSharedPtr dxpl=PList::Default())
Definition H5.h:583
void WriteVectorString(std::vector< std::string > s, DataSpaceSharedPtr filespace, DataTypeSharedPtr type, PListSharedPtr dxpl=PList::Default())
Definition H5.h:554
void Write(const std::vector< T > &data, DataSpaceSharedPtr filespace, DataTypeSharedPtr dt, PListSharedPtr dxpl=PList::Default())
Definition H5.h:537
void Write(const std::vector< T > &data)
Definition H5.h:519
HDF5 DataSpace wrapper.
Definition H5.h:313
void SelectRange(const hsize_t start, const hsize_t count)
Definition H5.cpp:460
void AppendRange(const hsize_t start, const hsize_t count)
Definition H5.cpp:465
static DataSpaceSharedPtr Null()
Definition H5.cpp:398
static DataSpaceSharedPtr Scalar()
Definition H5.cpp:405
std::vector< hsize_t > GetDims()
Definition H5.cpp:506
static DataSpaceSharedPtr OneD(hsize_t size)
Definition H5.cpp:411
void SetSelection(const hsize_t num_elmt, const std::vector< hsize_t > &coords)
Definition H5.cpp:482
Wrap and HDF5 data type object. Technically this can have attributes, but not really bothered.
Definition H5.h:400
static DataTypeSharedPtr OfObject(const T &obj)
Definition H5.h:404
DataTypeSharedPtr Copy() const
Definition H5.cpp:541
static DataTypeSharedPtr String(size_t len=0)
Definition H5.cpp:517
HDF5 file wrapper.
Definition H5.h:475
static FileSharedPtr Open(const std::string &filename, unsigned mode, PListSharedPtr accessPL=PList::Default())
Definition H5.cpp:647
static FileSharedPtr Create(const std::string &filename, unsigned mode, PListSharedPtr createPL=PList::Default(), PListSharedPtr accessPL=PList::Default())
Definition H5.cpp:638
hsize_t v_GetNumElements() override
Definition H5.cpp:668
void v_Close() override
Definition H5.cpp:663
HDF5 Group wrapper.
Definition H5.h:496
std::vector< std::string > GetElementNames()
Definition H5.cpp:698
hsize_t v_GetNumElements() override
Definition H5.cpp:691
CanHaveAttributesSharedPtr operator[](hsize_t idx)
void v_Close() override
Definition H5.cpp:685
CanHaveAttributesSharedPtr operator[](const std::string &key)
HDF5 base class.
Definition H5.h:96
static PListSharedPtr ObjectCreate()
Properties for object creation.
Definition H5.cpp:79
static PListSharedPtr DatasetXfer()
Properties for raw data transfer.
Definition H5.cpp:109
static PListSharedPtr StringCreate()
Properties for character encoding when encoding strings or object names.
Definition H5.cpp:145
static PListSharedPtr FileAccess()
Properties for file access.
Definition H5.cpp:91
void SetMpio(CommSharedPtr comm)
Definition H5.cpp:207
void SetDeflate(const unsigned level=1)
Definition H5.cpp:177
static PListSharedPtr FileCreate()
Properties for file creation.
Definition H5.cpp:85
static PListSharedPtr GroupAccess()
Properties for group access.
Definition H5.cpp:127
static PListSharedPtr DatasetAccess()
Properties for dataset access.
Definition H5.cpp:103
static PListSharedPtr Default()
Default options.
Definition H5.cpp:73
static PListSharedPtr FileMount()
Properties for file mounting.
Definition H5.cpp:115
static PListSharedPtr ObjectCopy()
Properties governing the object copying process.
Definition H5.cpp:157
static PListSharedPtr DatasetCreate()
Properties for dataset creation.
Definition H5.cpp:97
static PListSharedPtr GroupCreate()
Properties for group creation.
Definition H5.cpp:121
void SetChunk(const std::vector< hsize_t > &dims)
Definition H5.cpp:173
static PListSharedPtr AttributeCreate()
Properties for attribute creation.
Definition H5.cpp:151
static PListSharedPtr LinkAccess()
Properties governing link traversal when accessing objects.
Definition H5.cpp:169
static PListSharedPtr LinkCreate()
Properties governing link creation.
Definition H5.cpp:163
static PListSharedPtr DatatypeCreate()
Properties for datatype creation.
Definition H5.cpp:133
static PListSharedPtr DatatypeAccess()
Properties for datatype access.
Definition H5.cpp:139
void v_Close() override
Definition H5.cpp:66
Predefined HDF data types that must not be closed when done with.
Definition H5.h:440
static DataTypeSharedPtr Native()
Definition H5.h:723
static DataTypeSharedPtr CS1()
Definition H5.cpp:549
std::shared_ptr< DataSpace > DataSpaceSharedPtr
Definition H5.h:78
std::shared_ptr< PList > PListSharedPtr
Definition H5.h:92
std::shared_ptr< Object > ObjectSharedPtr
Definition H5.h:72
std::shared_ptr< File > FileSharedPtr
Definition H5.h:88
std::shared_ptr< DataType > DataTypeSharedPtr
Definition H5.h:74
std::shared_ptr< CanHaveGroupsDataSets > CanHaveGroupsDataSetsSharedPtr
Definition H5.h:84
std::shared_ptr< Attribute > AttributeSharedPtr
Definition H5.h:82
std::shared_ptr< CompoundDataType > CompoundDataTypeSharedPtr
Definition H5.h:76
std::shared_ptr< CanHaveAttributes > CanHaveAttributesSharedPtr
Definition H5.h:80
std::shared_ptr< Group > GroupSharedPtr
Definition FieldIOHdf5.h:48
std::shared_ptr< DataSet > DataSetSharedPtr
Definition H5.h:90
std::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
Definition Comm.h:55
STL namespace.
scalarT< T > max(scalarT< T > lhs, scalarT< T > rhs)
Definition scalar.hpp:305
static std::string Deconvert(const ConvertedType &obj)
Definition H5.h:712
static ConvertedType Convert(const std::string &obj)
Definition H5.h:708
static ConvertedType Convert(const T &obj)
Definition H5.h:660
static T Deconvert(const ConvertedType &obj)
Definition H5.h:666
Traits class for HDF5 data types.
Definition H5.h:370
DataTypeConversionPolicy< T > Converter
Definition H5.h:371
Converter::ConvertedType ConvertedType
Definition H5.h:379
static const void * GetAddress(const ConvertedType &obj)
static void * GetAddress(ConvertedType &obj)
static DataTypeSharedPtr GetType()
Definition H5.h:672
static ConvertedType Convert(const T &obj)
Definition H5.h:691
static const hid_t NativeType
Definition H5.h:377
static DataTypeSharedPtr GetType(const T &obj)
static T Deconvert(const ConvertedType &obj)
Definition H5.h:698