Mixe for Privacy and Anonymity in the Internet
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
CADatabase Class Reference

#include <CADatabase.hpp>

Collaboration diagram for CADatabase:

Public Member Functions

 CADatabase ()
 
 ~CADatabase ()
 
SINT32 insert (UINT8 key[16], UINT64 timestamp)
 Inserts this key in the replay DB. More...
 
SINT32 start ()
 
SINT32 stop ()
 
SINT32 test ()
 

Static Public Member Functions

static SINT32 measurePerformance (UINT8 *strLogFile, UINT32 lowerBoundEntries, UINT32 upperBoundEntries, UINT32 stepBy, UINT32 meassuresPerStep, UINT32 insertsPerMeasure)
 This mehtod can be used to measure the performance of the Replay database. More...
 

Private Member Functions

t_databaseInfocreateDBInfo ()
 Creates and initialises a dbinfo struct. More...
 
SINT32 clearDB (t_databaseInfo *pDB)
 clears the whole database pDB - but does not delete the hashtable pDB More...
 
SINT32 deleteDB (t_databaseInfo *&pDB)
 Deletes the whole database pDB. More...
 
SINT32 nextClock ()
 
SINT32 fill (UINT32 nrOfEntries)
 Pre fills the database with nrOfEntries random entries. More...
 
SINT32 simulateInsert (UINT8 key[16])
 This is a modified copy of insert() which simulates the insert() function as close as possible without actually changing the replay database. More...
 

Private Attributes

UINT64 m_lastSwitch
 
t_databaseInfom_currDatabase
 
t_databaseInfom_nextDatabase
 
t_databaseInfom_prevDatabase
 
volatile bool m_bRun
 
volatile SINT32 m_currentClock
 
CAMutexm_pMutex
 
CAThreadm_pThread
 

Friends

THREAD_RETURN db_loopMaintenance (void *param)
 

Detailed Description

Definition at line 53 of file CADatabase.hpp.

Constructor & Destructor Documentation

◆ CADatabase()

CADatabase::CADatabase ( )

Definition at line 34 of file CADatabase.cpp.

35  {
39  m_lastSwitch = time(NULL);
40  m_currentClock = 0;
41  m_pThread = NULL;
42  m_pMutex = new CAMutex();
43  }
t_databaseInfo * m_prevDatabase
Definition: CADatabase.hpp:106
t_databaseInfo * createDBInfo()
Creates and initialises a dbinfo struct.
Definition: CADatabase.cpp:45
UINT64 m_lastSwitch
Definition: CADatabase.hpp:103
t_databaseInfo * m_currDatabase
Definition: CADatabase.hpp:104
CAThread * m_pThread
Definition: CADatabase.hpp:111
CAMutex * m_pMutex
Definition: CADatabase.hpp:110
t_databaseInfo * m_nextDatabase
Definition: CADatabase.hpp:105
volatile SINT32 m_currentClock
Definition: CADatabase.hpp:109

References createDBInfo(), m_currDatabase, m_currentClock, m_lastSwitch, m_nextDatabase, m_pMutex, m_prevDatabase, and m_pThread.

Referenced by measurePerformance().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~CADatabase()

CADatabase::~CADatabase ( )

Definition at line 52 of file CADatabase.cpp.

53  {
54  m_pMutex->lock();
55  stop();
59  m_pMutex->unlock();
60  delete m_pMutex;
61  m_pMutex = NULL;
62  }
SINT32 deleteDB(t_databaseInfo *&pDB)
Deletes the whole database pDB.
Definition: CADatabase.cpp:84
SINT32 stop()
Definition: CADatabase.cpp:228
SINT32 unlock()
Definition: CAMutex.hpp:52
SINT32 lock()
Definition: CAMutex.hpp:41

References deleteDB(), CAMutex::lock(), m_currDatabase, m_nextDatabase, m_pMutex, m_prevDatabase, stop(), and CAMutex::unlock().

Here is the call graph for this function:

Member Function Documentation

◆ clearDB()

SINT32 CADatabase::clearDB ( t_databaseInfo pDB)
private

clears the whole database pDB - but does not delete the hashtable pDB

Parameters
pDBdatabase to delete

Definition at line 64 of file CADatabase.cpp.

65  {
66  UINT16 tmp, tmp2;
67  for (tmp = 0; tmp < 256; tmp++)
68  {
69  for (tmp2 = 0; tmp2 < 256; tmp2++)
70  {
71  while (pDBInfo->m_pHashTable[tmp][tmp2] != NULL)
72  {
73  t_databaseEntry* anker = pDBInfo->m_pHashTable[tmp][tmp2];
74  pDBInfo->m_pHashTable[tmp][tmp2] = anker->next;
75  delete anker;
76  anker = NULL;
77  }
78  }
79  }
80  pDBInfo->m_u32Size = 0;
81  return E_SUCCESS;
82  }
unsigned short UINT16
Definition: basetypedefs.h:133
const SINT32 E_SUCCESS
Definition: errorcodes.hpp:2
Definition: CADatabase.hpp:35
_t_database_entry * next
Definition: CADatabase.hpp:36

References _t_database_info::m_pHashTable, and _t_database_entry::next.

Referenced by deleteDB(), and nextClock().

Here is the caller graph for this function:

◆ createDBInfo()

t_databaseInfo * CADatabase::createDBInfo ( )
private

Creates and initialises a dbinfo struct.

Definition at line 45 of file CADatabase.cpp.

46  {
47  t_databaseInfo* pInfo = new t_databaseInfo;
48  memset(pInfo, 0, sizeof(t_databaseInfo));
49  return pInfo;
50  }
struct _t_database_info t_databaseInfo

Referenced by CADatabase().

Here is the caller graph for this function:

◆ deleteDB()

SINT32 CADatabase::deleteDB ( t_databaseInfo *&  pDB)
private

Deletes the whole database pDB.

Parameters
pDBdatabase to delete

Definition at line 84 of file CADatabase.cpp.

85  {
86  clearDB(pDBInfo);
87  delete pDBInfo;
88  pDBInfo = NULL;
89  return E_SUCCESS;
90  }
SINT32 clearDB(t_databaseInfo *pDB)
clears the whole database pDB - but does not delete the hashtable pDB
Definition: CADatabase.cpp:64

References clearDB(), and E_SUCCESS.

Referenced by ~CADatabase().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill()

SINT32 CADatabase::fill ( UINT32  nrOfEntries)
private

Pre fills the database with nrOfEntries random entries.

Parameters
nrOfEntriesnumber of entries to put in the database

Definition at line 354 of file CADatabase.cpp.

355  {
356  UINT32 i = 0;
357  UINT8 key[16];
358  while (i < nrOfEntries)
359  {
360  getRandom(key, 16);
361  if (insert(key, time(NULL)) == E_SUCCESS)
362  i++;
363  }
364  return E_SUCCESS;
365  }
SINT32 getRandom(UINT32 *val)
Gets 32 random bits.
Definition: CAUtil.cpp:346
unsigned char UINT8
Definition: basetypedefs.h:135
unsigned int UINT32
Definition: basetypedefs.h:131
SINT32 insert(UINT8 key[16], UINT64 timestamp)
Inserts this key in the replay DB.
Definition: CADatabase.cpp:93

References E_SUCCESS, getRandom(), and insert().

Referenced by measurePerformance(), and test().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ insert()

SINT32 CADatabase::insert ( UINT8  key[16],
UINT64  timestamp 
)

Inserts this key in the replay DB.

Definition at line 93 of file CADatabase.cpp.

94  {
95  // insert hash if timestamp valid in prevDB currDB nextDB
96  m_pMutex->lock();
97 
98  // return E_UNKNOWN if the timestamp is too old or is too far in the future
99  UINT32 currentTime = (UINT32) time(NULL);
100  if ((timestamp < (m_lastSwitch - SECONDS_PER_INTERVALL)) || (timestamp > (currentTime + FUTURE_TOLERANCE)))
101  {
102  // timestamp not valid!!
103  m_pMutex->unlock();
104  return E_UNKNOWN;
105  }
106 
107  t_databaseInfo* aktDB = NULL;
108  t_databaseInfo* prevDB = NULL;
109  t_databaseInfo* nextDB = NULL;
110 
111  if (timestamp < m_lastSwitch)
112  {
113  aktDB = m_prevDatabase;
114  prevDB = NULL;
115  nextDB = m_currDatabase;
116  }
117  else if (timestamp < (m_lastSwitch + SECONDS_PER_INTERVALL))
118  {
119  aktDB = m_currDatabase;
120  prevDB = m_prevDatabase;
121  nextDB = m_nextDatabase;
122  }
123  else
124  {
125  aktDB = m_nextDatabase;
126  prevDB = m_currDatabase;
127  nextDB = NULL;
128  }
129 
130  UINT64 hashkey = (((UINT64) key[2]) << 56) +
131  (((UINT64) key[3]) << 48) +
132  (((UINT64) key[4]) << 40) +
133  (((UINT64) key[5]) << 32) +
134  (((UINT64) key[6]) << 24) +
135  (((UINT64) key[7]) << 16) +
136  (((UINT64) key[8]) << 8) +
137  ((UINT64) key[9]);
138 
139 // insert
140  if (prevDB != NULL)
141  {
142  t_databaseEntry* tmp = prevDB->m_pHashTable[key[0]][key[1]];
143 
144  while (tmp != NULL)
145  {
146  if (tmp->key != hashkey)
147  {
148  tmp = tmp->next;
149  }
150  else
151  {
152  // duplicate found!!
153  m_pMutex->unlock();
154  return E_UNKNOWN;
155  }
156  }
157 
158  // inserting in DB
159  tmp = new t_databaseEntry;
160  tmp->next = prevDB->m_pHashTable[key[0]][key[1]];
161  tmp->key = hashkey;
162  prevDB->m_pHashTable[key[0]][key[1]] = tmp;
163  prevDB->m_u32Size++;
164  }
165 
166  t_databaseEntry* tmp = aktDB->m_pHashTable[key[0]][key[1]];
167 
168  while (tmp != NULL)
169  {
170  if (tmp->key != hashkey)
171  {
172  tmp = tmp->next;
173  }
174  else
175  {
176  // duplicate found!!
177  m_pMutex->unlock();
178  return E_UNKNOWN;
179  }
180  }
181 
182  // inserting in DB
183  tmp = new t_databaseEntry;
184  tmp->next = aktDB->m_pHashTable[key[0]][key[1]];
185  tmp->key = hashkey;
186  aktDB->m_pHashTable[key[0]][key[1]] = tmp;
187  aktDB->m_u32Size++;
188 
189  if (nextDB != NULL)
190  {
191  t_databaseEntry* tmp = nextDB->m_pHashTable[key[0]][key[1]];
192 
193  while (tmp != NULL)
194  {
195  if (tmp->key != hashkey)
196  {
197  tmp = tmp->next;
198  }
199  else
200  {
201  // duplicate found!!
202  m_pMutex->unlock();
203  return E_UNKNOWN;
204  }
205  }
206 
207  // inserting in DB
208  tmp = new t_databaseEntry;
209  tmp->next = nextDB->m_pHashTable[key[0]][key[1]];
210  tmp->key = hashkey;
211  nextDB->m_pHashTable[key[0]][key[1]] = tmp;
212  nextDB->m_u32Size++;
213  }
214 
215  m_pMutex->unlock();
216  return E_SUCCESS;
217 
218  }
#define FUTURE_TOLERANCE
Definition: CADatabase.hpp:48
#define SECONDS_PER_INTERVALL
Definition: CADatabase.hpp:47
struct _t_database_entry t_databaseEntry
struct __UINT64__t_ UINT64
#define E_UNKNOWN
Definition: errorcodes.hpp:3
UINT64 key
Definition: CADatabase.hpp:37
t_databaseEntry * m_pHashTable[0x100][0x100]
Definition: CADatabase.hpp:42

References E_SUCCESS, E_UNKNOWN, FUTURE_TOLERANCE, _t_database_entry::key, CAMutex::lock(), m_currDatabase, m_lastSwitch, m_nextDatabase, _t_database_info::m_pHashTable, m_pMutex, m_prevDatabase, _t_database_info::m_u32Size, _t_database_entry::next, SECONDS_PER_INTERVALL, and CAMutex::unlock().

Referenced by fill(), CAFirstMixA::loop(), CALastMixA::loop(), and CALastMixB::loop().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ measurePerformance()

SINT32 CADatabase::measurePerformance ( UINT8 strLogFile,
UINT32  lowerBoundEntries,
UINT32  upperBoundEntries,
UINT32  stepBy,
UINT32  meassuresPerStep,
UINT32  insertsPerMeasure 
)
static

This mehtod can be used to measure the performance of the Replay database.

The results are stored in a file in csv format. Ths method will do several measures with different numbers of elements in the database. These number could be specified using owerBoundEntries,upperBoundEntries and stepBy.

Parameters
strLogFilethe log file name
lowerBoundEntriesthe number of entries in the database (at beginn)
upperBoundEntriesthe number of entries in the database (at end)
stepByhow many entries should be added for each new measurement
meassuresPerStephow many measure values should be generate per step. That means that the experiement is repeated this many times.
insertsPerMeasureone measure value will be the time: (Total Insertion Time)/insertsPerMeasure

Definition at line 303 of file CADatabase.cpp.

309  {
310  initRandom();
311  CADatabase* pDatabase = NULL;
312  UINT32 aktNrOfEntries = lowerBoundEntries;
313  UINT8* key = new UINT8[insertsPerMeasure * 16];
314  UINT8* aktKey;
315  SINT32 file = open((char*) strLogFile, O_CREAT | O_WRONLY | O_LARGEFILE | O_TRUNC, S_IREAD | S_IWRITE);
316  char buff[255];
317  const char* atemplate = "%u,%u,%u\n";
318  const char* header =
319  "The format is as follows: Number of Entries in DB, Number of Inserts done, Total time for Inserts (in micro seconds)\n";
320  write(file, header, strlen(header));
321  while (aktNrOfEntries <= upperBoundEntries)
322  {
323  CAMsg::printMsg(LOG_DEBUG, "Starting measurement with %u entries in the replay database\n", aktNrOfEntries);
324  for (UINT32 i = 0; i < meassuresPerStep; i++)
325  {
326  pDatabase = new CADatabase();
327  pDatabase->fill(aktNrOfEntries);
328  UINT64 startTime, endTime;
329  getRandom(key, insertsPerMeasure * 16);
330  aktKey = key;
331  getcurrentTimeMicros(startTime);
332  for (UINT32 j = 0; j < insertsPerMeasure; j++)
333  {
334  pDatabase->simulateInsert(aktKey);
335  aktKey += 16;
336  }
337  getcurrentTimeMicros(endTime);
338  sprintf(buff, atemplate, aktNrOfEntries, insertsPerMeasure, diff64(endTime, startTime));
339  write(file, buff, strlen(buff));
340  printf("Start delete \n");
341  getcurrentTimeMicros(startTime);
342  delete pDatabase;
343  pDatabase = NULL;
344  getcurrentTimeMicros(endTime);
345  printf("delete takes %u microsecs\n", diff64(endTime, startTime));
346  }
347  aktNrOfEntries += stepBy;
348  }
349  delete[] key;
350  key = NULL;
351  return E_SUCCESS;
352  }
SINT32 getcurrentTimeMicros(UINT64 &u64Time)
Gets the current Systemtime in micros seconds.
Definition: CAUtil.cpp:280
SINT32 initRandom()
Definition: CAUtil.cpp:302
UINT32 diff64(const UINT64 &bigop, const UINT64 &smallop)
Definition: CAUtil.hpp:398
#define O_LARGEFILE
Definition: StdAfx.h:635
#define S_IWRITE
Definition: StdAfx.h:491
#define S_IREAD
Definition: StdAfx.h:488
signed int SINT32
Definition: basetypedefs.h:132
SINT32 simulateInsert(UINT8 key[16])
This is a modified copy of insert() which simulates the insert() function as close as possible withou...
Definition: CADatabase.cpp:368
SINT32 fill(UINT32 nrOfEntries)
Pre fills the database with nrOfEntries random entries.
Definition: CADatabase.cpp:354
static SINT32 printMsg(UINT32 typ, const char *format,...)
Writes a given message to the log.
Definition: CAMsg.cpp:251

References CADatabase(), diff64(), E_SUCCESS, fill(), getcurrentTimeMicros(), getRandom(), initRandom(), O_LARGEFILE, CAMsg::printMsg(), S_IREAD, S_IWRITE, and simulateInsert().

Here is the call graph for this function:

◆ nextClock()

SINT32 CADatabase::nextClock ( )
private

Definition at line 262 of file CADatabase.cpp.

263  {
264  m_pMutex->lock();
266  CAMsg::printMsg(LOG_DEBUG, "Replay DB Size was: %u\n", m_prevDatabase->m_u32Size);
271  m_nextDatabase = tmpDB;
272  m_pMutex->unlock();
273  return E_SUCCESS;
274  }

References clearDB(), E_SUCCESS, CAMutex::lock(), m_currDatabase, m_lastSwitch, m_nextDatabase, m_pMutex, m_prevDatabase, _t_database_info::m_u32Size, CAMsg::printMsg(), SECONDS_PER_INTERVALL, and CAMutex::unlock().

Here is the call graph for this function:

◆ simulateInsert()

SINT32 CADatabase::simulateInsert ( UINT8  key[16])
private

This is a modified copy of insert() which simulates the insert() function as close as possible without actually changing the replay database.

Definition at line 368 of file CADatabase.cpp.

369  {
370  m_pMutex->lock();
371  UINT16 timestamp = (key[14] << 8) | key[15];
372  if (timestamp < m_currentClock - 1 || timestamp > m_currentClock + 1)
373  {
374  //m_pMutex->unlock();
375  //return E_UNKNOWN;
376  }
378  if (timestamp > m_currentClock)
379  {
380  //aktDB=m_nextDatabase;
381  }
382  else if (timestamp < m_currentClock)
383  {
384  //aktDB=m_prevDatabase;
385  }
386 // UINT16 hashKey=(key[8]<<8)|key[9];
387 // t_databaseEntry* hashList=aktDB->m_pHashTable[hashKey];
388 // if(hashList==NULL)
389 // {
390 // LP_databaseEntry newEntry=getNewDBEntry(aktDB);
391 // newEntry->left=NULL;
392 // newEntry->right=NULL;
393 // newEntry->key=key[0]<<24|key[1]<<16|key[2]<<8|key[3];
394  //aktDB->m_pHashTable[hashKey]=newEntry;
395  aktDB->m_u32Size++;
396  m_pMutex->unlock();
397  return E_SUCCESS;
398  /* }
399  else
400  {
401  // UINT32 ret=key[0]<<24|key[1]<<16|key[2]<<8|key[3];
402  // LP_databaseEntry before=NULL;
403  do
404  {
405  //newEntry->keymemcmp(key,hashList->key,6);
406  if(ret==hashList->key)
407  {
408  m_pMutex->unlock();
409  return E_UNKNOWN;
410  }
411  before=hashList;
412  if(hashList->key<ret)
413  {
414  hashList=hashList->right;
415  }
416  else
417  {
418  hashList=hashList->left;
419  }
420  } while(hashList!=NULL);
421  // LP_databaseEntry newEntry=getNewDBEntry(aktDB);
422  // newEntry->left=newEntry->right=NULL;
423  //memcpy(newEntry->key,key,6);
424  // newEntry->key=ret;
425  // if(before->key<ret)
426  // {
427  //before->right=newEntry;
428  // }
429  // else
430  // {
431  //before->left=newEntry;
432  // }
433  }
434  aktDB->m_u32Size++;
435  m_pMutex->unlock();
436  return E_SUCCESS; */
437  }

References E_SUCCESS, CAMutex::lock(), m_currDatabase, m_currentClock, m_pMutex, _t_database_info::m_u32Size, and CAMutex::unlock().

Referenced by measurePerformance().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ start()

SINT32 CADatabase::start ( )

Definition at line 220 of file CADatabase.cpp.

221  {
222  m_pThread = new CAThread();
223  m_bRun = true;
225  return m_pThread->start(this);
226  }
friend THREAD_RETURN db_loopMaintenance(void *param)
Definition: CADatabase.cpp:241
volatile bool m_bRun
Definition: CADatabase.hpp:107
SINT32 start(void *param, bool bDaemon=false, bool bSilent=false)
Starts the execution of the main function of this thread.
Definition: CAThread.cpp:115
SINT32 setMainLoop(THREAD_MAIN_TYP fnc)
Sets the main function which will be executed within this thread.
Definition: CAThread.hpp:148

References db_loopMaintenance, m_bRun, m_pThread, CAThread::setMainLoop(), and CAThread::start().

Referenced by CAFirstMix::init(), and CAMiddleMix::init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ stop()

SINT32 CADatabase::stop ( )

Definition at line 228 of file CADatabase.cpp.

229  {
230  m_bRun = false;
231  SINT32 ret = E_SUCCESS;
232  if (m_pThread != NULL)
233  {
234  ret = m_pThread->join();
235  delete m_pThread;
236  m_pThread = NULL;
237  }
238  return ret;
239  }
SINT32 join()
Waits for the main function to finish execution.
Definition: CAThread.cpp:187

References E_SUCCESS, CAThread::join(), m_bRun, and m_pThread.

Referenced by ~CADatabase().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ test()

SINT32 CADatabase::test ( )

Definition at line 277 of file CADatabase.cpp.

278  {
279  /* CADatabase oDatabase;
280  oDatabase.start();
281  UINT8 key[16];
282  memset(key,0,16);
283  UINT32 i;
284  for(i=0;i<20;i++)
285  {
286  getRandom(key,4);
287  oDatabase.insert(key,time(NULL));///TODO WRONG - fixme
288  }
289  for(i=0;i<200000;i++)
290  {
291  getRandom(key,16);
292  oDatabase.insert(key,time(NULL));//TODO WRONG - Fixme
293  }
294  oDatabase.stop();
295  */
296  UINT32 entries = 10000;
297  fill(entries);
298  return E_SUCCESS;
299 // return CADatabase::fill(entries);
300  }

References E_SUCCESS, and fill().

Here is the call graph for this function:

Friends And Related Function Documentation

◆ db_loopMaintenance

THREAD_RETURN db_loopMaintenance ( void *  param)
friend

Definition at line 241 of file CADatabase.cpp.

242  {
243  INIT_STACK;
244  BEGIN_STACK("CADatabase::db_loopMaintenance");
245 
246  CADatabase* pDatabase=(CADatabase*)param;
247  while(pDatabase->m_bRun)
248  {
249  sSleep(10);
250  UINT32 currentTime=(UINT32)time(NULL);
251  if (pDatabase->m_lastSwitch+SECONDS_PER_INTERVALL<=currentTime)
252  {
253  pDatabase->nextClock();
254  }
255  }
256 
257  FINISH_STACK("CADatabase::db_loopMaintenance");
258 
260  }
#define INIT_STACK
Definition: CAThread.hpp:48
#define BEGIN_STACK(methodName)
Definition: CAThread.hpp:49
#define FINISH_STACK(methodName)
Definition: CAThread.hpp:50
SINT32 sSleep(UINT32 sec)
Sleeps sec Seconds.
Definition: CAUtil.cpp:425
#define THREAD_RETURN_SUCCESS
Definition: StdAfx.h:542
SINT32 nextClock()
Definition: CADatabase.cpp:262

Referenced by start().

Member Data Documentation

◆ m_bRun

volatile bool CADatabase::m_bRun
private

Definition at line 107 of file CADatabase.hpp.

Referenced by start(), and stop().

◆ m_currDatabase

t_databaseInfo* CADatabase::m_currDatabase
private

Definition at line 104 of file CADatabase.hpp.

Referenced by CADatabase(), insert(), nextClock(), simulateInsert(), and ~CADatabase().

◆ m_currentClock

volatile SINT32 CADatabase::m_currentClock
private

Definition at line 109 of file CADatabase.hpp.

Referenced by CADatabase(), and simulateInsert().

◆ m_lastSwitch

UINT64 CADatabase::m_lastSwitch
private

Definition at line 103 of file CADatabase.hpp.

Referenced by CADatabase(), insert(), and nextClock().

◆ m_nextDatabase

t_databaseInfo* CADatabase::m_nextDatabase
private

Definition at line 105 of file CADatabase.hpp.

Referenced by CADatabase(), insert(), nextClock(), and ~CADatabase().

◆ m_pMutex

CAMutex* CADatabase::m_pMutex
private

Definition at line 110 of file CADatabase.hpp.

Referenced by CADatabase(), insert(), nextClock(), simulateInsert(), and ~CADatabase().

◆ m_prevDatabase

t_databaseInfo* CADatabase::m_prevDatabase
private

Definition at line 106 of file CADatabase.hpp.

Referenced by CADatabase(), insert(), nextClock(), and ~CADatabase().

◆ m_pThread

CAThread* CADatabase::m_pThread
private

Definition at line 111 of file CADatabase.hpp.

Referenced by CADatabase(), start(), and stop().


The documentation for this class was generated from the following files: