16 #define leftlink left_ 17 #define rightlink right_ 18 #define uplink parent_ 24 #define sp1enq(i) { i->cnt_ = 0; spenq(i, sptree_); } 25 #define sp2enq(i) { i->cnt_ = -1; spenq(i, sptree2_); } 27 #define sp1enq(i) { i->cnt_ = 0; ++nenq1; spenq(i, sptree_); } 28 #define sp2enq(i) { i->cnt_ = -1; ++nenq2; spenq(i, sptree2_); } 53 for (i=0; i < level; ++
i) {
67 tpool_ =
new TQItemPool(1000);
75 #if COLLECT_TQueue_STATISTICS 76 nmove = ninsert = nrem = nleast = nbal = ncmplxrem = 0;
77 nfastmove = ncompare = nleastsrch = nfind = nfindsrch = 0;
85 while((q =
spdeq(&sptree_->root)) !=
nil) {
89 while((q =
spdeq(&sptree2_->root)) !=
nil) {
124 if (tnew <= nl->
t_ && tnew <= q2least_t()) {
126 }
else if (nl->
t_ <= q2least_t()) {
127 least_ =
spdeq(&sptree_->root);
130 least_ =
spdeq(&sptree2_->root);
133 }
else if (tnew > q2least_t()) {
134 least_ =
spdeq(&sptree2_->root);
144 }
else if (tnew < least_->
t_) {
157 #if COLLECT_TQueue_STATISTICS 158 Printf(
"insertions=%lu moves=%lu removals=%lu calls to least=%lu\n",
159 ninsert, nmove, nrem, nleast);
160 Printf(
"calls to find=%lu\n",
162 Printf(
"comparisons=%lu\n",
164 Printf(
"neqn1=%lu nenq2=%lu\n", nenq1, nenq2);
166 Printf(
"Turn on COLLECT_TQueue_STATISTICS_ in tqueue.h\n");
171 #if COLLECT_TQueue_STATISTICS 182 TQItem* i = tpool_->alloc();
199 TQItem* i = tpool_->alloc();
220 if (nl->
t_ <= q2least_t()) {
221 least_ =
spdeq(&sptree_->root);
223 least_ =
spdeq(&sptree2_->root);
225 }
else if (sptree2_->root){
226 least_ =
spdeq(&sptree2_->root);
244 if (t == least_t()) {
253 if (sptree2_->root) {
return sphead(sptree2_)->t_; }
SPBLK * spdeq(SPBLK **np)
void spdelete(SPBLK *n, SPTREE< SPBLK > *q)
static void deleteitem(TQItem *i)
SPBLK * sphead(SPTREE< SPBLK > *q)
void spinit(SPTREE< SPBLK > *q)
static void prnt(const TQItem *b, int level)
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_)
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)
void check(const char *errmess)
void move(TQItem *, double tnew)