16 #define leftlink left_ 17 #define rightlink right_ 18 #define uplink parent_ 45 for (i=0; i < level; ++
i) {
59 tpool_ =
new TQItemPool(1000);
66 #if COLLECT_TQueue_STATISTICS 67 nmove = ninsert = nrem = nleast = nbal = ncmplxrem = 0;
68 nfastmove = ncompare = nleastsrch = nfind = nfindsrch = 0;
74 while((q =
spdeq(&sptree_->root)) !=
nil) {
78 while((q = fifo_->dequeue()) !=
nil) {
91 for (
TQItem*
q = fifo_->first();
q;
q = fifo_->next(
q)) {
103 for (
TQItem*
q = fifo_->first();
q;
q = fifo_->next(
q)) {
117 if (tnew <= nl->
t_ && tnew <= fifo_->least_t()) {
119 }
else if (nl->
t_ <= fifo_->least_t()) {
120 least_ =
spdeq(&sptree_->root);
123 least_ = fifo_->dequeue();
126 }
else if (tnew > fifo_->least_t()) {
127 least_ = fifo_->dequeue();
137 }
else if (tnew < least_->
t_) {
140 spenq(least_, sptree_);
150 #if COLLECT_TQueue_STATISTICS 151 Printf(
"insertions=%lu moves=%lu removals=%lu calls to least=%lu\n",
152 ninsert, nmove, nrem, nleast);
153 Printf(
"calls to find=%lu\n",
155 Printf(
"comparisons=%lu\n",
158 Printf(
"Turn on COLLECT_TQueue_STATISTICS_ in tqueue.h\n");
163 #if COLLECT_TQueue_STATISTICS 173 TQItem* i = tpool_->alloc();
190 TQItem* i = tpool_->alloc();
211 if (nl->
t_ <= fifo_->least_t()) {
212 least_ =
spdeq(&sptree_->root);
214 least_ = fifo_->dequeue();
217 least_ = fifo_->dequeue();
233 if (t == least_t()) {
243 #if COLLECT_TQueue_STATISTICS 244 nfenq = nfdeq = nfrem = 0;
249 assert (head_ == 0 && tail_ == 0);
253 if (head_) {
return head_->t_; }
257 if (tail_) {
assert(tail_->t_ <= q->
t_); }
262 if (head_) { tail_->left_->right_ =
q;}
else { head_ = tail_; }
263 #if COLLECT_TQueue_STATISTICS 269 if (head_ == tail_) {
279 #if COLLECT_TQueue_STATISTICS 285 Printf(
"FifoQ remove %p\n", q);
286 if (head_ == q) { head_ = q->
right_; }
287 if (tail_ == q) { tail_ = q->
left_; }
292 #if COLLECT_TQueue_STATISTICS
SPBLK * spdeq(SPBLK **np)
void spdelete(SPBLK *n, SPTREE< SPBLK > *q)
SPBLK * sphead(SPTREE< SPBLK > *q)
static void deleteitem(TQItem *i)
void spinit(SPTREE< SPBLK > *q)
void forall_callback(void(*)(const TQItem *, int))
void spike_stat(double *)
void hoc_execerror(const char *, const char *)
TQItem * insert(double t, void *data_)
static void chk(TQItem *b, int level)
TQItem * insert_fifo(double t, void *data_)
static void prnt(const TQItem *b, int level)
SPBLK * splookup(double key, SPTREE< SPBLK > *q)
void move_least(double tnew)
void spscan(void(*f)(const SPBLK *, int), SPBLK *n, SPTREE< SPBLK > *q)
static const char * errmess_
static double least(void *v)
SPBLK * spenq(SPBLK *n, SPTREE< SPBLK > *q)
void check(const char *errmess)
void move(TQItem *, double tnew)