48 static bool zeBTree_Destroy_tree(
ZEBTREC_T *);
67 static int jlog2(
int);
76 #define JBT_LOCK(mutex) MUTEX_LOCK(mutex) 77 #define JBT_UNLOCK(mutex) MUTEX_UNLOCK(mutex) 79 #define JBT_ZERO(jbth) \ 81 jbth->signature = SIGNATURE; \ 84 jbth->reccmp = NULL; \ 86 jbth->chkCount = FALSE; \ 87 jbth->maxCount = MAX_BTNODES; \ 113 memset(jdbh, 0,
sizeof (
ZEBT_T));
202 (void) zeBTree_Destroy_tree(jdbh->
root);
209 memset(jdbh, 0,
sizeof (
ZEBT_T));
232 (void) zeBTree_Destroy_tree(jdbh->
root);
273 return zeBTree_Browse_tree(jdbh, func, jdbh->
root,
data);
295 node = zeBTree_Get_node(jdbh,
data, jdbh->
root);
341 ok = zeBTree_Add_node(jdbh,
data, &(jdbh->
root), &taller);
361 bool shorter =
FALSE;
366 root = zeBTree_Del_node(jdbh,
data, jdbh->
root, &shorter);
376 zeBTree_Destroy_tree(root)
382 zeBTree_Destroy_tree(root->left);
387 zeBTree_Destroy_tree(root->right);
399 zeBTree_Del_node(jdbh,
data, root, shorter)
444 zeBTree_Get_node(jdbh,
data, root)
458 if (root->
data == NULL)
469 return zeBTree_Get_node(jdbh,
data, root->
left);
471 return zeBTree_Get_node(jdbh,
data, root->
right);
481 zeBTree_Browse_tree(jdbh, func, root,
data)
498 if (root->
left != NULL)
499 n += zeBTree_Browse_tree(jdbh, func, root->
left,
data);
504 if (root->
right != NULL)
505 n += zeBTree_Browse_tree(jdbh, func, root->
right,
data);
521 if (dst == NULL || org == NULL)
527 return zeBTree_Cpy_tree(dst, org->
root, getit, arg);
535 zeBTree_Cpy_tree(jdbh, root, getit, arg)
544 (void) zeBTree_Cpy_tree(jdbh, root->
left, getit, arg);
545 if (root->
data != NULL)
547 if (getit(root->
data, arg))
554 (void) zeBTree_Cpy_tree(jdbh, root->
right, getit, arg);
581 if (zeBTree_Cpy_tree(jdbh, oroot, getit, arg))
583 zeBTree_Destroy_tree(oroot);
595 zeBTree_Rotate_Left(root)
603 if (root->
right == NULL)
619 zeBTree_Rotate_Right(root)
627 if (root->
left == NULL)
643 zeBTree_Right_Balance(root)
655 root = zeBTree_Rotate_Left(root);
678 x = zeBTree_Rotate_Right(x);
680 root = zeBTree_Rotate_Left(root);
692 zeBTree_Left_Balance(root)
704 root = zeBTree_Rotate_Right(root);
728 x = zeBTree_Rotate_Left(x);
730 root = zeBTree_Rotate_Right(root);
743 zeBTree_Node_Alloc(jdbh,
data)
759 if (rec->
data == NULL)
778 zeBTree_Add_node(jdbh,
data, root, taller)
792 node = zeBTree_Node_Alloc(jdbh,
data);
801 return (node != NULL);;
822 ok = zeBTree_Add_node(jdbh,
data, &(troot->
left), taller);
824 if (ok && (taller != NULL) && *taller)
832 node = zeBTree_Left_Balance(troot);
861 ok = zeBTree_Add_node(jdbh,
data, &(troot->
right), taller);
863 if (ok && (taller != NULL) && *taller)
879 node = zeBTree_Right_Balance(troot);
913 for (x /= 2; x != 0; x /= 2)
930 return 2 * jlog2(jdbh->
count);
bool zeBTree_Set_BTree_Size(ZEBT_T *jdbh, bool chkCount, int maxCount)
bool zeBTree_Del(ZEBT_T *jdbh, void *data)
void * zeBTree_Get(ZEBT_T *jdbh, void *data)
bool zeBTree_Init(ZEBT_T *jdbh, size_t size, ZEBT_CMP_F reccmp)
#define MUTEX_UNLOCK(mutex)
#define MUTEX_LOCK(mutex)
bool zeBTree_Add(ZEBT_T *jdbh, void *data)
#define ZE_LogMsgError(level,...)
bool zeBTree_Destroy(ZEBT_T *jdbh)
#define ZE_LogMsgNotice(level,...)
int zeBTree_Max_Height(ZEBT_T *)
int zeBTree_Count(ZEBT_T *jdbh)
bool zeBTree_Clear(ZEBT_T *jdbh)
bool zeBTree_Cpy(ZEBT_T *dst, ZEBT_T *org, ZEBT_SEL_F getit, void *arg)
#define ZE_MessageInfo(level,...)
int(* ZEBT_BROWSE_F)(void *, void *)
#define ZE_MessageWarning(level,...)
#define ZE_LogSysError(...)
#define ZE_LogMsgWarning(level,...)
bool(* ZEBT_SEL_F)(void *, void *)
int(* ZEBT_CMP_F)(void *, void *)
bool zeBTree_unLock(ZEBT_T *jdbh)
bool zeBTree_Lock(ZEBT_T *jdbh)
bool zeBTree_Cleanup(ZEBT_T *jdbh, ZEBT_SEL_F getit, void *arg)
int zeBTree_Browse(ZEBT_T *jdbh, ZEBT_BROWSE_F func, void *data)