summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Holesovsky <kendy@suse.cz>2013-02-06 22:31:43 +0100
committerJan Holesovsky <kendy@suse.cz>2013-02-06 22:31:43 +0100
commit8636a6d557772e6d566d59151b5ba559993faf0b (patch)
tree4dc9390364734187eceb80b413552abacb675648
parent53b715fc8afcd1f901d4a3e061255bec73f52668 (diff)
Dense B+ tree: Remove root / one level if possible.feature/bplustree
Change-Id: Icf76e6c711f43daa021baae47cb54cc2e4e5b0d4
-rw-r--r--sw/inc/densebplustree.cxx9
1 files changed, 9 insertions, 0 deletions
diff --git a/sw/inc/densebplustree.cxx b/sw/inc/densebplustree.cxx
index a4469c2ddd11..b0b034c9eedf 100644
--- a/sw/inc/densebplustree.cxx
+++ b/sw/inc/densebplustree.cxx
@@ -308,6 +308,15 @@ void DenseBPlusTree< Key, Value, Order >::Remove( Key nPos, Key nNumber )
}
m_nCount -= nNumber;
+
+ // remove one level, if needed
+ if ( m_pRoot->m_nUsed == 1 )
+ {
+ DBPTreeNode< Key, Value, Order > *pToDelete = m_pRoot;
+ m_pRoot = m_pRoot->m_pChildren[0];
+ delete pToDelete;
+ --m_nDepth;
+ }
}
template < class Key, class Value, int Order >