63#define MaxSplayTreeDepth 1024
87 (*
compare)(
const void *,
const void *);
90 *(*relinquish_key)(
void *),
153 const void *key,
const void *value)
166 if (splay_tree->
compare != (int (*)(
const void *,
const void *)) NULL)
169 compare=(splay_tree->
root->
key > key) ? 1 :
170 ((splay_tree->
root->
key < key) ? -1 : 0);
174 (splay_tree->
root->
value != (
void *) NULL))
178 (splay_tree->
root->
key != (
void *) NULL))
181 splay_tree->
root->
key=(
void *) key;
193 node->
key=(
void *) key;
194 node->
value=(
void *) value;
213 splay_tree->
root=node;
214 splay_tree->
key=(
void *) NULL;
254 bisect=low+(high-low)/2;
256 if ((low+1) > bisect)
260 if ((bisect+1) > high)
284 if (splay_tree->
nodes <= 2)
295 (
const void *) &node);
336 node=splay_tree->
root;
345 void *(*clone_key)(
void *),
void *(*clone_value)(
void *))
416 p=(
const char *) target;
417 q=(
const char *) source;
530 splay_tree->
key=(
void *) NULL;
531 if (splay_tree->
compare != (int (*)(
const void *,
const void *)) NULL)
534 compare=(splay_tree->
root->
key > key) ? 1 :
535 ((splay_tree->
root->
key < key) ? -1 : 0);
544 (splay_tree->
root->
value != (
void *) NULL))
548 (splay_tree->
root->
key != (
void *) NULL))
555 splay_tree->
root=right;
559 splay_tree->
root=left;
617 splay_tree->
key=(
void *) NULL;
618 if (splay_tree->
compare != (int (*)(
const void *,
const void *)) NULL)
621 compare=(splay_tree->
root->
key > key) ? 1 :
622 ((splay_tree->
root->
key < key) ? -1 : 0);
631 (splay_tree->
root->
value != (
void *) NULL))
635 (splay_tree->
root->
key != (
void *) NULL))
641 splay_tree->
root=right;
645 splay_tree->
root=left;
691 (splay_tree->
root->
value != (
void *) NULL))
695 (splay_tree->
root->
key != (
void *) NULL))
697 splay_tree->
root->
key=(
void *) NULL;
698 for (pend=splay_tree->
root; pend != (
NodeInfo *) NULL; )
710 (active->
left->
key != (
void *) NULL))
712 active->
left->
key=(
void *) pend;
722 (active->
right->
key != (
void *) NULL))
734 splay_tree->
signature=(~WizardSignature);
778 (splay_tree->
next == (
void *) NULL))
779 return((
void *) NULL);
782 splay_tree->
next=(
void *) NULL;
832 (splay_tree->
next == (
void *) NULL))
833 return((
void *) NULL);
836 splay_tree->
next=(
void *) NULL;
888 return((
void *) NULL);
891 if (splay_tree->
compare != (int (*)(
const void *,
const void *)) NULL)
894 compare=(splay_tree->
root->
key > key) ? 1 :
895 ((splay_tree->
root->
key < key) ? -1 : 0);
899 return((
void *) NULL);
936 return(splay_tree->
nodes);
967 int (*method)(
NodeInfo *,
const void *),
const void *value)
1003 sizeof(*transitions));
1004 if ((nodes == (
NodeInfo **) NULL) || (transitions == (
unsigned char *) NULL))
1008 nodes[0]=splay_tree->
root;
1009 transitions[0]=(
unsigned char) LeftTransition;
1013 transition=(TransitionType) transitions[i];
1016 case LeftTransition:
1018 transitions[i]=(
unsigned char) DownTransition;
1022 nodes[i]=node->
left;
1023 transitions[i]=(
unsigned char) LeftTransition;
1026 case RightTransition:
1028 transitions[i]=(
unsigned char) UpTransition;
1032 nodes[i]=node->
right;
1033 transitions[i]=(
unsigned char) LeftTransition;
1036 case DownTransition:
1039 transitions[i]=(
unsigned char) RightTransition;
1040 status=(*method)(node,value);
1095 int (*compare)(
const void *,
const void *),
void *(*relinquish_key)(
void *),
1096 void *(*relinquish_value)(
void *))
1104 (void) memset(splay_tree,0,
sizeof(*splay_tree));
1110 splay_tree->
key=(
void *) NULL;
1111 splay_tree->
next=(
void *) NULL;
1112 splay_tree->
nodes=0;
1189 splay_tree->
key=(
void *) NULL;
1190 if (splay_tree->
compare != (int (*)(
const void *,
const void *)) NULL)
1193 compare=(splay_tree->
root->
key > key) ? 1 :
1194 ((splay_tree->
root->
key < key) ? -1 : 0);
1203 (splay_tree->
root->
value != (
void *) NULL))
1207 splay_tree->
nodes--;
1210 splay_tree->
root=right;
1214 splay_tree->
root=left;
1271 value=(
void *) NULL;
1276 splay_tree->
key=(
void *) NULL;
1277 if (splay_tree->
compare != (int (*)(
const void *,
const void *)) NULL)
1280 compare=(splay_tree->
root->
key > key) ? 1 :
1281 ((splay_tree->
root->
key < key) ? -1 : 0);
1291 (splay_tree->
root->
key != (
void *) NULL))
1294 splay_tree->
nodes--;
1297 splay_tree->
root=right;
1301 splay_tree->
root=left;
1352 (splay_tree->
root->
value != (
void *) NULL))
1356 (splay_tree->
root->
key != (
void *) NULL))
1358 splay_tree->
root->
key=(
void *) NULL;
1359 for (pend=splay_tree->
root; pend != (
NodeInfo *) NULL; )
1371 (active->
left->
key != (
void *) NULL))
1373 active->
left->
key=(
void *) pend;
1383 (active->
right->
key != (
void *) NULL))
1396 splay_tree->
key=(
void *) NULL;
1397 splay_tree->
next=(
void *) NULL;
1398 splay_tree->
nodes=0;
1491 if (splay_tree->
compare != (int (*)(
const void *,
const void *)) NULL)
1494 compare=(n->
key > key) ? 1 : ((n->
key < key) ? -1 : 0);
1508 n=
Splay(splay_tree,depth+1,key,next,node,parent);
1514 if (grandparent == (
NodeInfo **) NULL)
1516 if (n == (*parent)->
left)
1529 if ((n == (*parent)->
left) && (*parent == (*grandparent)->
left))
1533 p->
right=(*grandparent);
1539 if ((n == (*parent)->
right) && (*parent == (*grandparent)->
right))
1543 p->
left=(*grandparent);
1549 if (n == (*parent)->
left)
1554 n->
left=(*grandparent);
1561 n->
right=(*grandparent);
1570 if (splay_tree->
key != (
void *) NULL)
1575 if (splay_tree->
compare != (int (*)(
const void *,
const void *)) NULL)
1578 compare=(splay_tree->
key > key) ? 1 :
1579 ((splay_tree->
key < key) ? -1 : 0);
1593 splay_tree->
key=(
void *) key;
#define WizardAssert(domain, predicate)
#define ThrowWizardFatalError(domain, error)
WizardBooleanType LogWizardEvent(const LogEventType type, const char *module, const char *function, const size_t line, const char *format,...)
WizardExport WizardBooleanType IsEventLogging(void)
#define GetWizardModule()
WizardExport void * AcquireWizardMemory(const size_t size)
WizardExport void * AcquireQuantumMemory(const size_t count, const size_t quantum)
WizardExport void * RelinquishWizardMemory(void *memory)
WizardExport void RelinquishSemaphoreInfo(SemaphoreInfo **semaphore_info)
WizardExport SemaphoreInfo * AcquireSemaphoreInfo(void)
WizardExport void LockSemaphoreInfo(SemaphoreInfo *semaphore_info)
WizardExport void UnlockSemaphoreInfo(SemaphoreInfo *semaphore_info)
WizardExport const void * GetValueFromSplayTree(SplayTreeInfo *splay_tree, const void *key)
static void BalanceSplayTree(SplayTreeInfo *splay_tree)
WizardExport const void * GetNextValueInSplayTree(SplayTreeInfo *splay_tree)
WizardExport WizardBooleanType DeleteNodeFromSplayTree(SplayTreeInfo *splay_tree, const void *key)
WizardExport const void * GetNextKeyInSplayTree(SplayTreeInfo *splay_tree)
static NodeInfo * Splay(SplayTreeInfo *splay_tree, const size_t depth, const void *key, NodeInfo **node, NodeInfo **parent, NodeInfo **grandparent)
struct _NodeInfo NodeInfo
static int IterateOverSplayTree(SplayTreeInfo *, int(*)(NodeInfo *, const void *), const void *)
WizardExport void ResetSplayTree(SplayTreeInfo *splay_tree)
WizardExport void ResetSplayTreeIterator(SplayTreeInfo *splay_tree)
WizardExport int CompareSplayTreeString(const void *target, const void *source)
WizardExport size_t GetNumberOfNodesInSplayTree(const SplayTreeInfo *splay_tree)
WizardExport WizardBooleanType DeleteNodeByValueFromSplayTree(SplayTreeInfo *splay_tree, const void *value)
WizardExport SplayTreeInfo * DestroySplayTree(SplayTreeInfo *splay_tree)
static int SplayTreeToNodeArray(NodeInfo *node, const void *nodes)
static NodeInfo * LinkSplayTreeNodes(NodeInfo **nodes, const size_t low, const size_t high)
static void SplaySplayTree(SplayTreeInfo *, const void *)
WizardExport void * RemoveNodeByValueFromSplayTree(SplayTreeInfo *splay_tree, const void *value)
WizardExport WizardBooleanType AddValueToSplayTree(SplayTreeInfo *splay_tree, const void *key, const void *value)
WizardExport void * RemoveNodeFromSplayTree(SplayTreeInfo *splay_tree, const void *key)
static void * GetFirstSplayTreeNode(SplayTreeInfo *splay_tree)
#define MaxSplayTreeDepth
WizardExport int CompareSplayTreeStringInfo(const void *target, const void *source)
WizardExport SplayTreeInfo * CloneSplayTree(SplayTreeInfo *splay_tree, void *(*clone_key)(void *), void *(*clone_value)(void *))
WizardExport SplayTreeInfo * NewSplayTree(int(*compare)(const void *, const void *), void *(*relinquish_key)(void *), void *(*relinquish_value)(void *))
WizardExport int LocaleCompare(const char *p, const char *q)
WizardExport int CompareStringInfo(const StringInfo *target, const StringInfo *source)
int(* compare)(const void *, const void *)
SemaphoreInfo * semaphore
void *(* relinquish_key)(void *)
void *(*) *(* relinquish_value)(void *)
WizardBooleanType balance