1 |
# HG changeset patch |
2 |
# Parent ff6ad274f8ecb1715d366ddb53ecafd422252660 |
3 |
do not insert new node if the whole range was shifted |
4 |
|
5 |
diff -r ff6ad274f8ec include/mdds/flat_segment_tree_def.inl |
6 |
--- a/inc/mdds/flat_segment_tree.hpp Thu Mar 24 14:54:16 2011 +0100 |
7 |
+++ b/inc/mdds/flat_segment_tree.hpp Thu Mar 24 14:55:26 2011 +0100 |
8 |
@@ -430,16 +430,25 @@ |
9 |
|
10 |
if (m_left_leaf->value_leaf.value != m_init_val) |
11 |
{ |
12 |
- // The leftmost leaf node has a non-initial value. We need to |
13 |
- // insert a new node to carry that value after the shift. |
14 |
- node_ptr new_node(new node(true)); |
15 |
- new_node->value_leaf.key = pos + size; |
16 |
- new_node->value_leaf.value = m_left_leaf->value_leaf.value; |
17 |
- m_left_leaf->value_leaf.value = m_init_val; |
18 |
- new_node->left = m_left_leaf; |
19 |
- new_node->right = m_left_leaf->right; |
20 |
- m_left_leaf->right->left = new_node; |
21 |
- m_left_leaf->right = new_node; |
22 |
+ if (size < m_right_leaf->value_leaf.key - m_left_leaf->value_leaf.key) |
23 |
+ { |
24 |
+ // The leftmost leaf node has a non-initial value. We need to |
25 |
+ // insert a new node to carry that value after the shift. |
26 |
+ node_ptr new_node(new node(true)); |
27 |
+ new_node->value_leaf.key = pos + size; |
28 |
+ new_node->value_leaf.value = m_left_leaf->value_leaf.value; |
29 |
+ m_left_leaf->value_leaf.value = m_init_val; |
30 |
+ new_node->left = m_left_leaf; |
31 |
+ new_node->right = m_left_leaf->right; |
32 |
+ m_left_leaf->right->left = new_node; |
33 |
+ m_left_leaf->right = new_node; |
34 |
+ } |
35 |
+ else |
36 |
+ { |
37 |
+ // We shifted out the whole range, so there would be no new |
38 |
+ // node inserted. Just set default value. |
39 |
+ m_left_leaf->value_leaf.value = m_init_val; |
40 |
+ } |
41 |
} |
42 |
|
43 |
m_valid_tree = false; |