20 # define STRCMP( a, b ) ( (Sct = *(a) - *(b)) ? Sct : strcmp( (a), (b) ) ) 22 #define STRCMP(a, b) (a - b) 39 template<
typename SPBLK>
57 #define spinit sptq_spinit 58 #define spempty sptq_spempty 59 #define spenq sptq_spenq 60 #define spdeq sptq_spdeq 61 #define spenqprior sptq_spenqprior 62 #define splay sptq_splay 63 #define sphead sptq_sphead 64 #define spdelete sptq_spdelete 65 #define spnext sptq_spnext 66 #define spprev sptq_spprev 67 #define spenqbefore sptq_spenqbefore 68 #define spenqafter sptq_spenqafter 69 #define splookup sptq_splookup 71 #define sptail sptq_sptail 72 #define spscan sptq_spscan 73 #define sprscan sptq_sprscan 74 #define spfhead sptq_spfhead 75 #define spfnext sptq_spfnext 76 #define spfprev sptq_spfprev 77 #define spstats sptq_spstats 137 template<
typename SPBLK>
154 template<
typename SPBLK>
174 template<
typename SPBLK>
206 if (
STRCMP( next->key, key ) > 0 )
213 temp = next->rightlink;
216 left->rightlink =
next;
218 right->leftlink =
NULL;
223 if(
STRCMP( temp->key, key ) > 0 )
225 left->rightlink =
next;
232 next->rightlink = temp->leftlink;
233 if( temp->leftlink !=
NULL )
234 temp->leftlink->uplink =
next;
235 left->rightlink = temp;
237 temp->leftlink =
next;
240 next = temp->rightlink;
243 right->leftlink =
NULL;
249 }
while(
STRCMP( next->key, key ) <= 0 );
255 temp = next->leftlink;
258 right->leftlink =
next;
259 next->uplink =
right;
260 left->rightlink =
NULL;
265 if(
STRCMP( temp->key, key ) <= 0 )
267 right->leftlink =
next;
268 next->uplink =
right;
273 next->leftlink = temp->rightlink;
274 if( temp->rightlink !=
NULL )
275 temp->rightlink->uplink =
next;
276 right->leftlink = temp;
277 temp->uplink =
right;
278 temp->rightlink =
next;
281 next = temp->leftlink;
284 left->rightlink =
NULL;
290 }
while(
STRCMP( next->key, key ) > 0 );
297 n->leftlink = n->rightlink;
301 #if BBTQ != 4 && BBTQ != 5 318 template<
typename SPBLK>
336 left = next->leftlink;
340 *np = next->rightlink;
343 (*np)->uplink =
NULL;
349 farleft = left->leftlink;
350 if( farleft ==
NULL )
353 next->leftlink = left->rightlink;
354 if( left->rightlink !=
NULL )
355 left->rightlink->uplink =
next;
360 farfarleft = farleft->leftlink;
361 if( farfarleft ==
NULL )
364 left->leftlink = farleft->rightlink;
365 if( farleft->rightlink !=
NULL )
366 farleft->rightlink->uplink =
left;
371 next->leftlink = farleft;
372 farleft->uplink =
next;
373 left->leftlink = farleft->rightlink;
374 if( farleft->rightlink !=
NULL )
375 farleft->rightlink->uplink =
left;
376 farleft->rightlink =
left;
377 left->uplink = farleft;
402 template<
typename SPBLK>
432 if(
STRCMP( next->key, key ) >= 0 )
439 temp = next->rightlink;
442 left->rightlink =
next;
444 right->leftlink =
NULL;
447 if(
STRCMP( temp->key, key ) >= 0 )
449 left->rightlink =
next;
455 next->rightlink = temp->leftlink;
456 if( temp->leftlink !=
NULL )
457 temp->leftlink->uplink =
next;
458 left->rightlink = temp;
460 temp->leftlink =
next;
463 next = temp->rightlink;
466 right->leftlink =
NULL;
470 }
while(
STRCMP( next->key, key ) < 0 );
476 temp = next->leftlink;
479 right->leftlink =
next;
480 next->uplink =
right;
481 left->rightlink =
NULL;
484 if(
STRCMP( temp->key, key ) < 0 )
486 right->leftlink =
next;
487 next->uplink =
right;
492 next->leftlink = temp->rightlink;
493 if( temp->rightlink !=
NULL )
494 temp->rightlink->uplink =
next;
495 right->leftlink = temp;
496 temp->uplink =
right;
497 temp->rightlink =
next;
500 next = temp->leftlink;
503 left->rightlink =
NULL;
507 }
while(
STRCMP( next->key, key ) >= 0 );
514 n->leftlink = n->rightlink;
538 template<
typename SPBLK>
549 #if BBTQ != 4 && BBTQ != 5 554 right = n->rightlink;
568 if( up->leftlink == prev )
570 if( upup !=
NULL && upup->leftlink == up )
572 upupup = upup->uplink;
573 upup->leftlink = up->rightlink;
574 if( upup->leftlink !=
NULL )
575 upup->leftlink->uplink = upup;
576 up->rightlink = upup;
580 else if( upupup->leftlink == upup )
581 upupup->leftlink = up;
583 upupup->rightlink = up;
587 up->leftlink =
right;
595 if( upup !=
NULL && upup->rightlink == up )
597 upupup = upup->uplink;
598 upup->rightlink = up->leftlink;
599 if( upup->rightlink !=
NULL )
600 upup->rightlink->uplink = upup;
605 else if( upupup->rightlink == upup )
606 upupup->rightlink = up;
608 upupup->leftlink = up;
612 up->rightlink =
left;
622 if( q->
root != prev )
630 n->rightlink =
right;
729 template<
typename SPBLK>
739 x->rightlink = q->
root;
752 while( x->leftlink !=
NULL )
770 template<
typename SPBLK>
786 x->leftlink = q->
root->leftlink;
787 x->rightlink = q->
root->rightlink;
788 if( x->leftlink !=
NULL )
789 x->leftlink->uplink = x;
790 if( x->rightlink !=
NULL )
791 x->rightlink->uplink = x;
809 template<
typename SPBLK>
818 x =
spdeq( &n->rightlink );
823 x->rightlink = n->rightlink;
825 if( x->rightlink !=
NULL )
826 x->rightlink->uplink = x;
839 while( x->leftlink !=
NULL )
862 template<
typename SPBLK>
875 while( x->rightlink !=
NULL )
898 template<
typename SPBLK>
904 n->leftlink = n1->leftlink;
905 if( n->leftlink !=
NULL )
906 n->leftlink->uplink =
n;
927 template<
typename SPBLK>
933 n->rightlink = n1->rightlink;
934 if( n->rightlink !=
NULL )
935 n->rightlink->uplink =
n;
973 template<
typename SPBLK>
986 while( n && (Sct = key!= n->key ) )
989 n = ( Sct < 0 ) ? n->leftlink : n->rightlink;
1024 n = (SPBLK *)
emalloc(
sizeof( *n ) );
1027 n->rightlink =
NULL;
1029 #if BBTQ != 4 && BBTQ != 5 1052 template<
typename SPBLK>
1059 while( x->leftlink !=
NULL )
1075 template<
typename SPBLK>
1083 while( x->rightlink !=
NULL )
1100 template<
typename SPBLK>
1106 for( x = n !=
NULL ? n : spfhead<SPBLK>( q ); x !=
NULL ; x =
spfnext( x ) )
1119 template<
typename SPBLK>
1125 for( x = n !=
NULL ? n : spftail<SPBLK>( q ); x !=
NULL ; x =
spfprev( x ) )
1138 template<
typename SPBLK>
1155 while( x->leftlink !=
NULL )
1165 if( x->leftlink == n )
1191 template<
typename SPBLK>
1208 while( x->rightlink !=
NULL )
1218 if( x->rightlink == n )
1236 template<
typename SPBLK>
1240 static char buf[ 128 ];
1252 sprintf(buf,
"f(%d %4.2f) i(%d %4.2f) s(%d %4.2f)",
1255 return (
const char*)
buf;
SPBLK * spftail(SPTREE< SPBLK > *q)
sprintf(buf," if (secondorder) {\ " int _i;\" " for(_i=0;_i< %d;++_i) {\" " _p[_slist%d[_i]]+=dt *_p[_dlist%d[_i]];\" " }}\", numeqn, listnum, listnum)
static double done(void *v)
int const size_t const size_t n
char * emalloc(unsigned n)