stec-platform
memoryatom.h
1 #ifndef MEMORYATOM_H
2 #define MEMORYATOM_H
3 
4 #include <QObject>
5 #include <QVarLengthArray>
6 #include <QReadWriteLock>
7 #include <QVariant>
8 #include <QtGlobal>
9 
10 #include <platform_global.h>
11 #include <memoryheap.h>
12 
13 
19 class PLATFORMSHARED_EXPORT MemoryAtom : public QObject
20 {
21  Q_OBJECT
22 
23 private :
24  RecursiveLock classLock;
25  void unlock()
26  {
27  classLock.unlock();
28  }
29  void lockForWrite()
30  {
31  classLock.lockForWrite();
32  }
33  void lockForRead()
34  {
35  classLock.lockForRead();
36  }
37 protected :
38  MemoryHeap storeRoom;
39 
40 public:
42  explicit MemoryAtom(QObject *parent = 0);
43 
45  VremVArray getArray()
46  {
47  VremVArray i1;
48 
49  lockForRead();
50 
51  i1 = storeRoom.getArray();
52  unlock();
53  return i1;
54  }
55 
57  VremVArray getArray(int index, int count )
58  {
59  VremVArray ibv;
60  lockForRead();
61  ibv = storeRoom.getArray(index, count);
62 
63  unlock();
64  return ibv;
65  }
66 
76  int insertVariant(int index, QVariant i1, QVariant src = "local" )
77  {
78 
79  qint16 _count;
80  _count = 0;
81 
82  lockForWrite();
83  storeRoom.insertVariant(index, i1);
84  _count = 1;
85 
86  unlock();
87  if (receivers(SIGNAL(SignalUpdateHasOccured(qint16, qint16, QVariant ))) > 0)
88  emit SignalUpdateHasOccured(index, _count, src );
89 
90  return _count;
91  }
92 
102  int insertArray(int index, const VremVArray &i1, QVariant src = "local" )
103  {
104  lockForWrite();
105  storeRoom.insertArray(index, i1);
106  unlock();
107  if (receivers(SIGNAL(SignalUpdateHasOccured(qint16, qint16, QVariant ))) > 0)
108  emit SignalUpdateHasOccured(index, i1.size(), src );
109 
110  return i1.size();
111  }
112 
113 
121  void resetArray(const VremVArray &i1, QVariant src = "local")
122  {
123  classLock.lockForWrite();
124  storeRoom.clear();
125  storeRoom.insertArray(0, i1);
126  classLock.unlock();
127  if (receivers(SIGNAL(SignalDataResetHasOccured( qint16, QVariant ))) > 0)
128  emit SignalDataResetHasOccured( i1.size(), src );
129  }
130 
137  void clear(QVariant src = "local")
138  {
139  classLock.lockForWrite();
140  storeRoom.clear();
141  classLock.unlock();
142  if (receivers(SIGNAL(SignalUpdateHasOccured(qint16, qint16, QVariant ))) > 0)
143  emit SignalUpdateHasOccured(0, 0, src );
144  }
145 
146 
148  int getSize(void)
149  {
150  int size;
151  lockForRead();
152  size = storeRoom.size();
153  unlock();
154  return size;
155  }
156 
157 
160  {
161  qint16 index, count;
162  index = count = 0;
163 
164  lockForWrite();
165 
166  i1.lockForRead();
167  storeRoom = i1.storeRoom;
168  i1.unlock();
169  count = (qint16 )storeRoom.size();
170  unlock();
171  if (receivers(SIGNAL(SignalUpdateHasOccured(qint16, qint16, QVariant ))) > 0)
172  emit SignalUpdateHasOccured(index, count, "local" );
173  return *this;
174  }
175 
177  MemoryAtom &operator=( VremVArray &i1 )
178  {
179  qint16 index, count;
180  index = count = 0;
181 
182  lockForWrite();
183  storeRoom = i1;
184  count = storeRoom.size();
185  unlock();
186  if (receivers(SIGNAL(SignalUpdateHasOccured(qint16, qint16, QVariant ))) > 0)
187  emit SignalUpdateHasOccured(index, count, "local" );
188  return *this;
189  }
190 
191 
192 signals:
193  void SignalUpdateHasOccured( qint16 index, qint16 count, QVariant srcOfUpdate );
194  void SignalDataResetHasOccured( qint16 count, QVariant srcOfUpdate );
195 
196 
197 
198 public slots:
199 
200 
201 };
202 
203 
204 
205 
206 
207 #endif // MEMORYATOM_H
The MemoryAtom class Shared memory atom for use by platform ownership of data per node.
Definition: memoryatom.h:20
VremVArray getArray(int index, int count)
gets the array based on index and count
Definition: memoryatom.h:57
VremVArray getArray()
gets the entire array of data
Definition: memoryatom.h:45
void resetArray(const VremVArray &i1, QVariant src="local")
resetArray
Definition: memoryatom.h:121
int insertVariant(int index, QVariant i1, QVariant src="local")
insertVariant
Definition: memoryatom.h:76
int getSize(void)
returns the size of a memory atom
Definition: memoryatom.h:148
int insertArray(int index, const VremVArray &i1, QVariant src="local")
insertArray
Definition: memoryatom.h:102
MemoryAtom & operator=(MemoryAtom &i1)
simple operators
Definition: memoryatom.h:159
MemoryAtom & operator=(VremVArray &i1)
simple operator
Definition: memoryatom.h:177
void clear(QVariant src="local")
clear
Definition: memoryatom.h:137
The MemoryHeap class provides a memory atom for use anywhere based on insert and rules for memory ato...
Definition: memoryheap.h:18
virtual int size(void)
returns the size of the memory atom
Definition: memoryheap.cpp:183
virtual VremVArray getArray()
returns the memory atom
Definition: memoryheap.cpp:30
virtual void clear(void)
clears the memory atom off
Definition: memoryheap.cpp:176
virtual int insertVariant(int index, QVariant &i1)
insert a QVariant into a memory heap
Definition: memoryheap.cpp:136
virtual int insertArray(int index, const VremVArray &i1)
insert an array of QVariants into a memory heap based on index
Definition: memoryheap.cpp:154
The RecursiveLock class Allows a recursive read write lock to occur.
Definition: platform_global.h:113