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() {
69  return head_;
70  }
71  TQItem* next(TQItem* q) {
72  return q->right_;
73  }
74 
75  private:
76  TQItem* head_;
77  TQItemPool* tpool_;
78  MUTDEC
79 };
80 
81 #endif
Definition: bbtqueue.h:6
static int first
Definition: fmenu.cpp:190
Item * next(Item *item)
Definition: list.cpp:88
size_t q
#define MUTDEC
Definition: nrnmutdec.h:68
static double remove(void *v)
Definition: ocdeck.cpp:207
void remove_all(EventButton)
static double insert(void *v)
Definition: tqueue.cpp:22
declarePool(TQItemPool, TQItem) class SelfQueue
Definition: tqueue.h:9