WARNING: USE THIS SOFTWARE AT YOUR OWN RISK! THIS IS EXPERIMENTAL SOFTWARE NOT INTENDED FOR PRODUCTION USE! Zuble is currently an early stage prototype. As such Zuble is minimally tested and inherently unstable. It is provided for experimental, development, and demonstration purposes only. Zuble QML Types   |  Zuble C++ Classes   |  Zuble Overview
Zuble  0.1
Zuble Framework C++/QML extension API
ZblLogMapData.h
Go to the documentation of this file.
1 #ifndef ZBLLOGMAPDATA_H
2 #define ZBLLOGMAPDATA_H
3 
4 #include "zglobal.h"
5 #include "ZblLogLinkList.h"
6 #include <QList>
7 #include <QMap>
8 #include <QSharedData>
9 
10 namespace Zbl
11 {
12 
13 class ZLogMap;
14 
25 class ZblLogMapData : public QSharedData
26 {
27 public:
28 
30 
35  enum MarkType {
40  };
41  //Q_ENUMS(MarkType)
42 
43  //Q_DECLARE_FLAGS(MarkTypes, MarkType)
44 
49  enum MarkRole {
50  FirstID = 0, // id of first log record
51  //LastID, // id of last log record
52  SeekPosition, // file seek position of first record
53  MessageText // message text (optional field)
54  };
55 
56  //Q_ENUMS(MarkRole)
57 
58  typedef QList<ZLogMap*> zLogMapList;
59 
61 
62  ZblLogMapData(MarkType markType) : m_markType(markType){}
63 
64  ZblLogMapData(int markType)
65  {
66  if(isValidMapType(markType))
67  m_markType = MarkType(markType);
68  else
70  }
71 
72 
74  : QSharedData(other), m_map(other.m_map), m_markType(other.m_markType) { }
75 
77 
78 
84  MarkType getMapType() const;
85 
92  static bool isValidMapType(int mapType);
93 
102  bool insertMark(
103  qint64 recordID,
104  qint64 lastRecordID,
105  qint64 seekPosition);
106 
115  bool hasMark(qint64 recordID) const;
116 
132  qint64 findNextMark(qint64 startID, bool forward) const;
133 
134 
143  bool removeMark(qint64 recordID, qint64 lastRecordID);
144 
152  bool clear();
153 
154 
161 
162 
163 #if 0
164 
170  QObject* getMarkModel();
171 #endif
172 
173 
174 
175 protected:
176 
186  class MarkNode
187  {
188  friend class ZblLogMapData;
189 
190  public:
192  qint64 recordID = -1,
193  qint64 lastID = -1,
194  qint64 seekPos = -1)
195  :
196  m_recordID(recordID),
197  m_lastID(lastID),
198  m_seekPos(seekPos){
199  if(recordID != -1 && lastID == -1)
200  m_lastID = recordID;}
201 
203  qint64 recordID,
204  qint64 seekPos = -1)
205  :
206  m_recordID(recordID),
207  m_lastID(recordID),
208  m_seekPos(seekPos){}
209 
210 
211  MarkNode(const MarkNode& other)
212  {
213  m_recordID = other.m_recordID;
214  m_lastID = other.m_lastID;
215  m_seekPos = other.m_seekPos;
216  }
217 
218  MarkNode& operator=(const MarkNode& other)
219  {
220  m_recordID = other.m_recordID;
221  m_lastID = other.m_lastID;
222  m_seekPos = other.m_seekPos;
223  return *this;
224  }
225 
226  bool operator==(const MarkNode& other)
227  {
228  return m_recordID == other.m_recordID;
229  }
230 
231  bool operator<(const MarkNode& other) const
232  {return m_recordID < other.m_recordID;}
233  bool operator>(const MarkNode& other) const {return other < *this;}
234  bool operator<=(const MarkNode& other) const {return !(*this > other);}
235  bool operator>=(const MarkNode& other) const {return !(*this < other);}
236 
237  qint64 getFirstID() const {return m_recordID;}
238  qint64 getLastID() const {return m_lastID;}
239  qint64 getSeekPos() const {return m_seekPos;}
240 
241  private:
242 
243  qint64 m_recordID;
244  qint64 m_lastID;
245  qint64 m_seekPos;
246  };
247 
248  // typedef QMap<qint64, MarkNode> zLogMap;
249  //typedef QMap<qint64, MarkNode>::iterator zLogMapIterator;
250 
251 
252  void mergeMarkNodes(QMap<qint64, MarkNode>::iterator it);
253 
254  bool removeRange(QMap<qint64, MarkNode>::iterator it, qint64 recordID, qint64 lastRecordID);
255 
256  bool decapitateRange(QMap<qint64, MarkNode>::iterator it, qint64 newStartID);
257 
258  bool truncateRange(QMap<qint64, MarkNode>::iterator it, qint64 newEndID);
259 
260  bool splitRange(QMap<qint64, MarkNode>::iterator it, qint64 endHeadID, qint64 startTailID);
261 
263 
267  QMap<qint64, MarkNode> m_map;
268 
274 
275 };
276 
277 } // Zbl
278 
279 
280 Q_DECLARE_METATYPE(Zbl::ZblLogMapData)
281 Q_DECLARE_METATYPE(Zbl::ZblLogMapData::MarkType)
282 Q_DECLARE_METATYPE(Zbl::ZblLogMapData::MarkRole)
283 
284 #endif // ZBLLOGMAPDATA_H
ZblLogMapData(MarkType markType)
Definition: ZblLogMapData.h:62
MarkType
Types of log maps: Invalid, Selection, Search, Bookmark.
Definition: ZblLogMapData.h:35
bool operator>=(const MarkNode &other) const
ZblLogMapData(const ZblLogMapData &other)
Definition: ZblLogMapData.h:73
void mergeMarkNodes(QMap< qint64, MarkNode >::iterator it)
#define ZBL_DECLARE_LOGGED_OBJECT
Definition: zglobal.h:94
bool splitRange(QMap< qint64, MarkNode >::iterator it, qint64 endHeadID, qint64 startTailID)
bool insertMark(qint64 recordID, qint64 lastRecordID, qint64 seekPosition)
Creates a new log mark in the database.
MarkRole
Roles for the log map&#39;s data model.
Definition: ZblLogMapData.h:49
MarkNode(qint64 recordID, qint64 seekPos=-1)
bool operator<=(const MarkNode &other) const
MarkType m_markType
The type of mark map: invalid, selection, bookmark, searchmark.
bool truncateRange(QMap< qint64, MarkNode >::iterator it, qint64 newEndID)
MarkNode(qint64 recordID=-1, qint64 lastID=-1, qint64 seekPos=-1)
ZblLogLinkList getLogLinkList() const
Obtain a ZblLogLinkList object containing expanded log links.
bool clear()
Removes all marks from the log map.
QList< ZLogMap * > zLogMapList
Definition: ZblLogMapData.h:58
Definition: ZAndGate.cpp:6
A mark node is a compressed set of contiguous log record links.
bool decapitateRange(QMap< qint64, MarkNode >::iterator it, qint64 newStartID)
MarkNode & operator=(const MarkNode &other)
bool operator>(const MarkNode &other) const
MarkType getMapType() const
returns this log map&#39;s mark type
ZblLogMapData(int markType)
Definition: ZblLogMapData.h:64
static bool isValidMapType(int mapType)
Determine if a value is a valid logmap type.
MarkNode(const MarkNode &other)
bool removeRange(QMap< qint64, MarkNode >::iterator it, qint64 recordID, qint64 lastRecordID)
bool removeMark(qint64 recordID, qint64 lastRecordID)
Removes the specified mark from the log map.
ZBL_DECLARE_LOGGED_OBJECT QMap< qint64, MarkNode > m_map
A lookup table for mark nodes. It maps firstRecordID to MarkNode object.
bool operator<(const MarkNode &other) const
qint64 findNextMark(qint64 startID, bool forward) const
Search forward or backward for the next mark from a specified starting position.
bool hasMark(qint64 recordID) const
Determine if the log map contains a mark for the specified log record.
The implicitly shared data object encapsulated by ZblLogMap objects.
Definition: ZblLogMapData.h:25
bool operator==(const MarkNode &other)