|
|
5198193 |
# HG changeset patch
|
|
|
5198193 |
# Parent ff6ad274f8ecb1715d366ddb53ecafd422252660
|
|
|
5198193 |
do not insert new node if the whole range was shifted
|
|
|
5198193 |
|
|
|
5198193 |
diff -r ff6ad274f8ec include/mdds/flat_segment_tree_def.inl
|
|
|
34e3cc2 |
--- misc/mdds_0.3.0/inc/mdds/flat_segment_tree.hpp Thu Mar 24 14:54:16 2011 +0100
|
|
|
34e3cc2 |
+++ misc/build/mdds_0.3.0/inc/mdds/flat_segment_tree.hpp Thu Mar 24 14:55:26 2011 +0100
|
|
|
5198193 |
@@ -430,16 +430,25 @@
|
|
|
5198193 |
|
|
|
5198193 |
if (m_left_leaf->value_leaf.value != m_init_val)
|
|
|
5198193 |
{
|
|
|
5198193 |
- // The leftmost leaf node has a non-initial value. We need to
|
|
|
5198193 |
- // insert a new node to carry that value after the shift.
|
|
|
5198193 |
- node_ptr new_node(new node(true));
|
|
|
5198193 |
- new_node->value_leaf.key = pos + size;
|
|
|
5198193 |
- new_node->value_leaf.value = m_left_leaf->value_leaf.value;
|
|
|
5198193 |
- m_left_leaf->value_leaf.value = m_init_val;
|
|
|
5198193 |
- new_node->left = m_left_leaf;
|
|
|
5198193 |
- new_node->right = m_left_leaf->right;
|
|
|
5198193 |
- m_left_leaf->right->left = new_node;
|
|
|
5198193 |
- m_left_leaf->right = new_node;
|
|
|
5198193 |
+ if (size < m_right_leaf->value_leaf.key - m_left_leaf->value_leaf.key)
|
|
|
5198193 |
+ {
|
|
|
5198193 |
+ // The leftmost leaf node has a non-initial value. We need to
|
|
|
5198193 |
+ // insert a new node to carry that value after the shift.
|
|
|
5198193 |
+ node_ptr new_node(new node(true));
|
|
|
5198193 |
+ new_node->value_leaf.key = pos + size;
|
|
|
5198193 |
+ new_node->value_leaf.value = m_left_leaf->value_leaf.value;
|
|
|
5198193 |
+ m_left_leaf->value_leaf.value = m_init_val;
|
|
|
5198193 |
+ new_node->left = m_left_leaf;
|
|
|
5198193 |
+ new_node->right = m_left_leaf->right;
|
|
|
5198193 |
+ m_left_leaf->right->left = new_node;
|
|
|
5198193 |
+ m_left_leaf->right = new_node;
|
|
|
5198193 |
+ }
|
|
|
5198193 |
+ else
|
|
|
5198193 |
+ {
|
|
|
5198193 |
+ // We shifted out the whole range, so there would be no new
|
|
|
5198193 |
+ // node inserted. Just set default value.
|
|
|
5198193 |
+ m_left_leaf->value_leaf.value = m_init_val;
|
|
|
5198193 |
+ }
|
|
|
5198193 |
}
|
|
|
5198193 |
|
|
|
5198193 |
m_valid_tree = false;
|