diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2004-11-18 20:11:54 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2004-11-18 20:11:54 (GMT) |
commit | 8bf670baf64e0e6038e43c7f4473b84a758dcc2c (patch) | |
tree | 709a845fb3b76e71ce289bfac700f43d944d5931 /src/H5TB.c | |
parent | 9a3071eadc1234866ee9c379c11b85a85cb394e8 (diff) | |
download | hdf5-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.c | 11 |
1 files changed, 7 insertions, 4 deletions
@@ -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) |