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;