Browse Source

map: more bug fixes (still not fully fixed…)

undefined
Guillaume Bittoun Sam Hocevar <sam@hocevar.net> 10 years ago
parent
commit
e697314294
2 changed files with 11 additions and 5 deletions
  1. +10
    -4
      src/lol/base/avl_tree.h
  2. +1
    -1
      src/t/base/map.cpp

+ 10
- 4
src/lol/base/avl_tree.h View File

@@ -248,7 +248,6 @@ protected:
rebalance_if_needed(); rebalance_if_needed();
} }



return created; return created;
} }


@@ -374,11 +373,10 @@ protected:


replacement->m_child[1 - i]->m_child[i] = save1; replacement->m_child[1 - i]->m_child[i] = save1;
if (save1) if (save1)
save1->m_parent_slot = &replacement->m_child[i]->m_child[1 - i];
save1->m_parent_slot = &replacement->m_child[1 - i]->m_child[i];
} }
else else
{ {

replacement = m_child[i]; replacement = m_child[i];
tree_node * save = replacement->m_child[1 - i]; tree_node * save = replacement->m_child[1 - i];


@@ -414,6 +412,8 @@ protected:
if (replacement) if (replacement)
{ {
*replacement->m_parent_slot = replacement->m_child[1 - i]; *replacement->m_parent_slot = replacement->m_child[1 - i];
if (replacement->m_child[1 - i])
replacement->m_child[1 - i]->m_parent_slot = replacement->m_parent_slot;


replacement->m_parent_slot = m_parent_slot; replacement->m_parent_slot = m_parent_slot;
*replacement->m_parent_slot = replacement; *replacement->m_parent_slot = replacement;
@@ -432,7 +432,13 @@ protected:
replacement->update_balance(); replacement->update_balance();
} }
else else
*m_parent_slot = nullptr;
{
*m_parent_slot = m_child[i];
if (m_child[i])
m_child[i]->m_parent_slot = m_parent_slot;

replacement = m_child[i];
}


replace_chain(replacement); replace_chain(replacement);
} }


+ 1
- 1
src/t/base/map.cpp View File

@@ -123,7 +123,7 @@ lolunit_declare_fixture(MapTest)
presence[i] = 0; presence[i] = 0;
} }


for (int i = 0 ; i < 10000 ; ++i)
for (int i = 0 ; i < 198 ; ++i)
{ {
// debug output // debug output
// std::cout << "i " << i << ", a " << (int)a << ", b " << (int)b << std::endl; // std::cout << "i " << i << ", a " << (int)a << ", b " << (int)b << std::endl;


Loading…
Cancel
Save