NEURON
spt2queue.h
Go to the documentation of this file.
1 //#ifndef tqueue_h
2 //#define tqueue_h
3 
4 // second splay tree for the NetCons and PreSyns with same delay. First
5 // splay tree for others (especially SelfEvents).
6 // forall_callback does one splay tree first and then the other (so
7 // not in time order)
8 #define COLLECT_TQueue_STATISTICS 1
9 struct SPTREE;
10 
11 class TQItem {
12  public:
13  TQItem();
14  virtual ~TQItem();
15  bool check();
16  void clear(){};
17 
18  public:
19  void* data_;
20  double t_;
21  TQItem* left_;
22  TQItem* right_;
23  TQItem* parent_;
24  int cnt_; // reused: -1 means it is in the second splay tree
25 };
26 
27 class TQueue {
28  public:
29  TQueue();
30  virtual ~TQueue();
31 
32 #if FAST_LEAST // must be on
33  TQItem* least() {
34  return least_;
35  }
36  double least_t() {
37  if (least_) {
38  return least_->t_;
39  } else {
40  return 1e15;
41  }
42  }
43 #else
44  TQItem* least(); // does not remove from TQueue
45  double least_t();
46 #endif
47  TQItem* insert(double t, void* data_);
48  TQItem* insert_fifo(double t, void* data_);
49  TQItem* find(double t);
50  void remove(TQItem*);
51  void move(TQItem*, double tnew);
52  void move_least(double tnew);
53  void print();
54  void check(const char* errmess);
55  void statistics();
56  void spike_stat(double*);
57  void forall_callback(void (*)(const TQItem*, int));
58  double q2least_t();
59 
60  private:
63  TQItem* least_;
64 #if COLLECT_TQueue_STATISTICS
65  unsigned long ninsert, nrem, nleast, nbal, ncmplxrem;
66  unsigned long ncompare, nleastsrch, nfind, nfindsrch, nmove, nfastmove;
67  unsigned long nenq1, nenq2;
68 #endif
69 };
70 //#endif
Definition: bbtqueue.h:6
virtual ~TQItem()
void clear()
Definition: spt2queue.h:16
double t_
Definition: bbtqueue.h:23
bool check()
TQItem * right_
Definition: bbtqueue.h:25
int cnt_
Definition: spt2queue.h:24
TQItem * parent_
Definition: bbtqueue.h:26
TQItem * left_
Definition: bbtqueue.h:24
void * data_
Definition: bbtqueue.h:22
unsigned long nbal
Definition: bbtqueue.h:58
void statistics()
unsigned long nleastsrch
Definition: bbtqueue.h:59
void remove(TQItem *)
double least_t()
Definition: bbtqueue.cpp:131
SPTREE * sptree2_
Definition: spt2queue.h:62
TQItem * least()
Definition: bbtqueue.cpp:140
void check(const char *errmess)
virtual ~TQueue()
TQItem * least()
void move(TQItem *, double tnew)
unsigned long nmove
Definition: bbtqueue.h:59
TQItem * least_
Definition: bbtqueue.h:54
TQItem * insert_fifo(double t, void *data_)
Definition: spt2queue.cpp:216
unsigned long ninsert
Definition: bbtqueue.h:58
void print()
unsigned long nrem
Definition: bbtqueue.h:58
TQItem * insert(double t, void *data_)
unsigned long nenq1
Definition: spt2queue.h:67
unsigned long nfastmove
Definition: bbtqueue.h:59
SPTREE * sptree_
Definition: spt2queue.h:61
double q2least_t()
Definition: spt2queue.cpp:271
TQItem * find(double t)
unsigned long nfindsrch
Definition: bbtqueue.h:59
unsigned long ncompare
Definition: bbtqueue.h:59
unsigned long nleast
Definition: bbtqueue.h:58
unsigned long nfind
Definition: bbtqueue.h:59
unsigned long ncmplxrem
Definition: bbtqueue.h:58
void forall_callback(void(*)(const TQItem *, int))
void move_least(double tnew)
void spike_stat(double *)
Definition: spt2queue.cpp:189
unsigned long nenq2
Definition: spt2queue.h:67
double t
Definition: cvodeobj.cpp:59
Definition: sptree.h:40