NEURON
tqueue.h
Go to the documentation of this file.
1 #ifndef tqueue_h
2 #define tqueue_h
3 #undef check
4 
5 #include <nrnmutdec.h>
6 #include <pool.h>
7 
8 class TQItem;
9 declarePool(TQItemPool, TQItem)
10 
11 // 0 use bbtqueue, 1 use rbtqueue, 2 use sptqueue, 3 use sptfifoq
12 #define BBTQ 5
13 
14 #define FAST_LEAST 1
15 
16 #if BBTQ == 0
17 #include <bbtqueue.h>
18 #endif
19 
20 #if BBTQ == 1
21 #define RBTQueue TQueue
22 #define RBTQItem TQItem
23 #include <rbtqueue.h>
24 #endif
25 
26 #if BBTQ == 2
27 #define SplayTQueue TQueue
28 #define SplayTQItem TQItem
29 #include <sptqueue.h>
30 #endif
31 
32 #if BBTQ == 3
33 // note: cannot use the fifo queue for parallel simulations since
34 // the received MPI_Allgather buffer is not properly time sorted.
35 #undef FAST_LEAST
36 // required
37 #define FAST_LEAST 1
38 #define SplayTFifoQueue TQueue
39 #define SplayTFifoQItem TQItem
40 #include <sptfifoq.h>
41 #endif
42 
43 #if BBTQ == 4
44 #undef FAST_LEAST
45 // required
46 #define FAST_LEAST 1
47 #define Splay2TQueue TQueue
48 #define Splay2TQItem TQItem
49 #include <spt2queue.h>
50 #endif
51 
52 #if BBTQ == 5
53 #undef FAST_LEAST
54 // required
55 #define FAST_LEAST 1
56 #define SplayTBinQueue TQueue
57 #define SplayTBinQItem TQItem
58 #include <sptbinq.h>
59 #endif
60 
61 class SelfQueue { // not really a queue but a doubly linked list for fast
62 public: // insertion, deletion, iteration
63  SelfQueue(TQItemPool*, int mkmut = 0);
64  virtual ~SelfQueue();
65  TQItem* insert(void*);
66  void* remove(TQItem*);
67  void remove_all();
68  TQItem* first() { return head_; }
69  TQItem* next(TQItem* q) { return q->right_; }
70 private:
71  TQItem* head_;
72  TQItemPool* tpool_;
73  MUTDEC
74 };
75 
76 #endif
static int first
Definition: fmenu.cpp:186
Item * next(Item *item)
Definition: list.cpp:95
Definition: bbtqueue.h:6
declarePool(TQItemPool, TQItem) class SelfQueue
Definition: tqueue.h:9
void remove_all(EventButton)
#define MUTDEC
Definition: nrnmutdec.h:28
static double insert(void *v)
Definition: tqueue.cpp:22
size_t q
TQItem * right_
Definition: bbtqueue.h:20