Skip to content

Commit 5b11820

Browse files
committed
Clear is now implemented faster.
1 parent a593477 commit 5b11820

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

include/interval-tree/interval_tree.hpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -702,13 +702,15 @@ namespace lib_interval_tree
702702
other.size_ = 0;
703703
return *this;
704704
}
705+
705706
/**
706707
* Removes all from this tree.
707708
*/
708-
void clear()
709+
void clear() noexcept
709710
{
710-
for (auto i = std::begin(*this); i != std::end(*this);)
711-
i = erase(i);
711+
clear_subtree(root_);
712+
root_ = nullptr;
713+
size_ = 0;
712714
}
713715

714716
/**
@@ -1144,20 +1146,30 @@ namespace lib_interval_tree
11441146
}
11451147

11461148
private:
1147-
node_type* copyTreeImpl(node_type* root, node_type* parent)
1149+
node_type* copy_tree_impl(node_type* root, node_type* parent)
11481150
{
11491151
if (root)
11501152
{
11511153
auto* cpy = new node_type(parent, root->interval());
11521154
cpy->color_ = root->color_;
11531155
cpy->max_ = root->max_;
1154-
cpy->left_ = copyTreeImpl(root->left_, cpy);
1155-
cpy->right_ = copyTreeImpl(root->right_, cpy);
1156+
cpy->left_ = copy_tree_impl(root->left_, cpy);
1157+
cpy->right_ = copy_tree_impl(root->right_, cpy);
11561158
return cpy;
11571159
}
11581160
return nullptr;
11591161
};
11601162

1163+
void clear_subtree(node_type* node)
1164+
{
1165+
if (node)
1166+
{
1167+
clear_subtree(node->left_);
1168+
clear_subtree(node->right_);
1169+
delete node;
1170+
}
1171+
}
1172+
11611173
template <typename ThisType, typename IteratorT, typename FunctionT, typename ComparatorFunctionT>
11621174
static bool find_all_i
11631175
(

0 commit comments

Comments
 (0)