summaryrefslogtreecommitdiffstats
path: root/src/H5TB.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2004-11-18 20:11:54 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2004-11-18 20:11:54 (GMT)
commit8bf670baf64e0e6038e43c7f4473b84a758dcc2c (patch)
tree709a845fb3b76e71ce289bfac700f43d944d5931 /src/H5TB.c
parent9a3071eadc1234866ee9c379c11b85a85cb394e8 (diff)
downloadhdf5-8bf670baf64e0e6038e43c7f4473b84a758dcc2c.zip
hdf5-8bf670baf64e0e6038e43c7f4473b84a758dcc2c.tar.gz
hdf5-8bf670baf64e0e6038e43c7f4473b84a758dcc2c.tar.bz2
[svn-r9551] Purpose:
Code optimization Description: Rework & move around some of the macros for querying balanced properties of nodes to speed up tree balancing code. Platforms tested: FreeBSD 4.10 (sleipnir) w/parallel Solaris 2.7 (arabica) Too minor to require h5committest
Diffstat (limited to 'src/H5TB.c')
-rw-r--r--src/H5TB.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/H5TB.c b/src/H5TB.c
index 350a8f4..c2b3bed 100644
--- a/src/H5TB.c
+++ b/src/H5TB.c
@@ -1590,15 +1590,17 @@ H5TB_swapkid(H5TB_NODE ** root, H5TB_NODE * ptr, int side)
static herr_t
H5TB_balance(H5TB_NODE ** root, H5TB_NODE * ptr, int side, int added)
{
+ H5TB_leaf olcnt, orcnt; /* Old left & right counts for node */
+ H5TB_flag odouble; /* Old 'double' status */
int deeper = added; /* 1 if sub-tree got longer; -1 if got shorter */
int odelta;
- int obal;
FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5TB_balance);
while (NULL != ptr) {
- odelta = Delta(ptr, side); /* delta before the node was added */
- obal = UnBal(ptr);
+ olcnt = LeftCnt(ptr);
+ orcnt = RightCnt(ptr);
+ odouble = Double(ptr);
if (LEFT == side) /* One more/fewer left child: */
if (0 < added)
ptr->lcnt++; /* LeftCnt(ptr)++ */
@@ -1610,6 +1612,7 @@ H5TB_balance(H5TB_NODE ** root, H5TB_NODE * ptr, int side, int added)
ptr->rcnt--; /* RightCnt(ptr)-- */
if (0 != deeper)
{ /* One leg got longer or shorter: */
+ odelta = DeltaCnt(olcnt, orcnt, odouble, side); /* compute delta before the node was added */
if ((deeper < 0 && odelta < 0) || (deeper > 0 && odelta > 0))
{ /* Became too unbalanced: */
H5TB_NODE *kid;
@@ -1638,7 +1641,7 @@ H5TB_balance(H5TB_NODE ** root, H5TB_NODE * ptr, int side, int added)
ptr = H5TB_swapkid(root, ptr, side);
}
}
- else if (obal)
+ else if (olcnt!=orcnt)
{ /* Just became balanced: */
ptr->flags &= ~H5TB_UNBAL;
if (0 < deeper)