QDaq  0.2.6
Qt-based Data Aqcuisition
 All Classes Functions Variables Typedefs Enumerations Enumerator Properties Groups Pages
qdaqh5file.h
1 #ifndef QDAQH5FILE_H
2 #define QDAQH5FILE_H
3 
4 class h5helper;
5 
6 #include "QDaqTypes.h"
7 #include "QDaqObject.h"
8 
9 #include <hdf5.h>
10 #include <H5Cpp.h>
11 
12 #include <string>
13 
14 using namespace H5;
15 
16 class QDaqH5File
17 {
18 public:
19  enum Version {
20  V_INVALID,
21  V_1_0,
22  V_1_1,
23  V_LAST = V_1_1
24  };
25 
26 private:
27  friend class h5helper;
28  h5helper* helper_;
29  QString lastError_;
30  QStringList warnings_;
31  const QDaqObject* top_;
32 
33  void newHelper(Version v);
34  void writeRecursive(CommonFG* h5g, const QDaqObject* obj);
35  void readRecursive(CommonFG* h5g, QDaqObject* &parent_obj);
36 
37  static Version toVersion(int mj, int mn)
38  {
39  if (mj==1 && mn==0) return V_1_0;
40  if (mj==1 && mn==1) return V_1_1;
41  return V_INVALID;
42  }
43 
44 public:
45  QDaqH5File();
46  ~QDaqH5File();
47 
49  bool h5write(const QDaqObject* obj, const QString& filename);
51  QDaqObject* h5read(const QString& filename);
52 
53  h5helper* helper() { return helper_; }
54 
55  QString lastError() const { return lastError_; }
56  const QStringList& warnings() const { return warnings_; }
57 
58  const QDaqObject* getTopObject() const { return top_; }
59 
60 };
61 
62 class h5helper
63 {
64 protected:
65  QDaqH5File::Version ver_;
66  int major_, minor_;
67  QDaqH5File* file_;
68 
69  virtual void writeDynamicProperties(CommonFG* h5obj, const QDaqObject* m_object) = 0;
70  virtual void readDynamicProperties(CommonFG* h5obj, QDaqObject* m_object) = 0;
71 
72  struct deferedPtrData {
73  QDaqObject* obj;
74  const char* propName;
75  QStringList pathList;
76  bool isList;
77  deferedPtrData(QDaqObject* o = 0, const char* n = 0, const QString& p = QString()) :
78  obj(o), propName(n), isList(false)
79  {
80  if (!p.isEmpty()) pathList << p;
81  }
82  deferedPtrData(QDaqObject* o, const char* n, const QStringList& p) :
83  obj(o), propName(n), pathList(p), isList(true)
84  {}
85  };
86 
87  QList<deferedPtrData> deferedPtrs;
88 
89 public:
90  h5helper(QDaqH5File::Version v, int mj, int mn, QDaqH5File* f) :
91  ver_(v), major_(mj), minor_(mn), file_(f)
92  {}
93  virtual ~h5helper()
94  {}
95 
96  QDaqH5File::Version version() const { return ver_; }
97 
98  int major() const { return major_; }
99  int minor() const { return minor_; }
100 
101  virtual void write(CommonFG* h5obj, const char* name, const int &v) = 0;
102  virtual void write(CommonFG* h5obj, const char* name, const double& v) = 0;
103  virtual void write(CommonFG* h5obj, const char* name, const QString& S) = 0;
104  virtual void write(CommonFG* h5obj, const char* name, const QStringList& S) = 0;
105  virtual void write(CommonFG* h5obj, const char* name, const QDaqVector& value) = 0;
106  virtual void write(CommonFG* h5obj, const char* name, const QDaqObject* obj) = 0;
107  virtual void write(CommonFG* , const char* , const QDaqObjectList & ) = 0;
108 
109  virtual bool read(CommonFG* h5obj, const char* name, int& value) = 0;
110  virtual bool read(CommonFG* h5obj, const char* name, double& value) = 0;
111  virtual bool read(CommonFG* h5obj, const char* name, QString& str) = 0;
112  virtual bool read(CommonFG* h5obj, const char* name, QStringList& S) = 0;
113  virtual bool read(CommonFG* h5obj, const char* name, QDaqVector& value) = 0;
114 
115  virtual void writeProperties(CommonFG* h5obj, const QDaqObject* m_object, const QMetaObject* metaObject) = 0;
116  virtual void readProperties(CommonFG* h5obj, QDaqObject* obj) = 0;
117 
118  virtual void lockedPropertyList(QStringList S = QStringList()) = 0;
119 
120  virtual void connectDeferedPointers() = 0;
121 
122  virtual Group createGroup(CommonFG* loc, const char* name) = 0;
123 
124  virtual QByteArrayList getGroupNames(CommonFG* h5obj, bool isRoot = false) = 0;
125 
126  // Check if a dataset "name" exists in H5 file/group
127  bool h5exist_ds(CommonFG* h5obj, const char* name);
128  // Get group name from obj pointer
129  QString groupName(CommonFG* h5obj);
130 
131  void pushWarning(const QString& w) { file_->warnings_.push_back(w); }
132 
133  void deferObjPtrRead(QDaqObject* obj, const char* name, const QString& path);
134  void deferObjPtrRead(QDaqObject* obj, const char* name, const QStringList& pathList);
135 };
136 
137 #endif // QDAQH5FILE_H
Base class of all QDaq objects.
Definition: QDaqObject.h:108
A buffer for storing double numbers.
Definition: QDaqVector.h:40
QList< QDaqObject * > QDaqObjectList
A QList of QDaqObject pointers.
Definition: QDaqObject.h:23