Fix NodeEntry::deleteChildren() to update indices correctly

This commit is contained in:
Martchus 2018-06-09 21:17:50 +02:00
parent a7b597759b
commit ba1e58c1e5
1 changed files with 12 additions and 3 deletions

View File

@ -290,13 +290,22 @@ NodeEntry::~NodeEntry()
*/ */
void NodeEntry::deleteChildren(int begin, int end) void NodeEntry::deleteChildren(int begin, int end)
{ {
auto iterator = m_children.cbegin() + begin; const auto endIterator = m_children.begin() + end;
auto endIterator = m_children.begin() + end;
for (; iterator < endIterator; ++iterator) { // delete the children
for (auto iterator = m_children.cbegin() + begin; iterator != endIterator; ++iterator) {
(*iterator)->m_parent = nullptr; (*iterator)->m_parent = nullptr;
delete *iterator; delete *iterator;
} }
// remove the children from the list
m_children.erase(m_children.begin() + begin, endIterator); m_children.erase(m_children.begin() + begin, endIterator);
// adjust indices of subsequent children
const int diff = end - begin;
for (auto iterator = m_children.begin() + begin, end = m_children.end(); iterator != end; ++iterator) {
(*iterator)->m_index -= diff;
}
} }
/*! /*!