Accelerated Computation Engine
eabstractdata.h
1 #ifndef EABSTRACTDATA_H
2 #define EABSTRACTDATA_H
3 #include <QtCore>
4 #include <memory>
5 #include "emetadata.h"
6 #include "eexception.h"
7 #include "global.h"
8 //
9 
10 
11 
23 class EAbstractData : public QObject
24 {
25  Q_OBJECT
26 public:
34  virtual qint64 dataEnd() const = 0;
39  virtual void readData() = 0;
43  virtual void writeNewData() = 0;
44  virtual void finish();
51  virtual QAbstractTableModel* model() = 0;
52 public:
53  template<class T> const T* cast() const;
54  template<class T> T* cast();
55 protected:
56  const EMetadata& systemMeta() const;
57  const EMetadata& meta() const;
58  void setMeta(const EMetadata& newMeta);
59  const EDataStream& stream() const;
61  void seek(qint64 index) const;
62  void allocate(qint64 size);
63 };
64 
65 
66 
67 
68 
69 
78 template<class T> const T* EAbstractData::cast() const
79 {
80  // Use qt object cast to cast this object to the given template type as read only.
81  // If the cast fails then throw an exception, else return the cast read only
82  // pointer.
83  const T* ret {qobject_cast<const T*>(this)};
84  if ( !ret )
85  {
86  E_MAKE_EXCEPTION(e);
87  e.setTitle(tr("Logic Error"));
88  e.setDetails(tr("Cannot convert abstract data object to given type."));
89  throw e;
90  }
91  return ret;
92 }
93 
94 
95 
96 
97 
98 
107 template<class T> T* EAbstractData::cast()
108 {
109  // Use qt object cast to cast this object to the given template type. If the cast
110  // fails then throw an exception, else return the cast pointer.
111  T* ret {qobject_cast<T*>(this)};
112  if ( !ret )
113  {
114  E_MAKE_EXCEPTION(e);
115  e.setTitle(tr("Logic Error"));
116  e.setDetails(tr("Cannot convert abstract data object to given type."));
117  throw e;
118  }
119  return ret;
120 }
121 
122 
123 
124 #endif
Definition: edatastream.h:21
virtual qint64 dataEnd() const =0
virtual QAbstractTableModel * model()=0
virtual void finish()
Definition: eabstractdata.cpp:18
void allocate(qint64 size)
Definition: eabstractdata.cpp:142
const EMetadata & meta() const
Definition: eabstractdata.cpp:50
void setMeta(const EMetadata &newMeta)
Definition: eabstractdata.cpp:68
const T * cast() const
Definition: eabstractdata.h:78
Definition: eabstractdata.h:23
Definition: emetadata.h:22
virtual void readData()=0
virtual void writeNewData()=0
const EDataStream & stream() const
Definition: eabstractdata.cpp:85
const EMetadata & systemMeta() const
Definition: eabstractdata.cpp:33
void seek(qint64 index) const
Definition: eabstractdata.cpp:121