summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AK/Tests/TestTrie.cpp7
-rw-r--r--AK/Trie.h15
2 files changed, 22 insertions, 0 deletions
diff --git a/AK/Tests/TestTrie.cpp b/AK/Tests/TestTrie.cpp
index cae1b5b63f..853b9ff18a 100644
--- a/AK/Tests/TestTrie.cpp
+++ b/AK/Tests/TestTrie.cpp
@@ -71,10 +71,17 @@ TEST_CASE(iterate)
for (size_t i = 0; i < input.size(); ++i)
input[i] = i;
+ bunch_of_numbers.insert(input.begin(), input.end());
+
// Iteration order is preorder (order between adjacent nodes is not defined, but parents come before children)
// in this case, the tree is linear.
size_t i = 0;
+ bool is_root = true;
for (auto& node : bunch_of_numbers) {
+ if (is_root) {
+ is_root = false;
+ continue;
+ }
EXPECT_EQ(input[i], node.value());
++i;
}
diff --git a/AK/Trie.h b/AK/Trie.h
index ae9f52806f..c90989c8c1 100644
--- a/AK/Trie.h
+++ b/AK/Trie.h
@@ -183,6 +183,21 @@ public:
return static_cast<BaseType&>(*last_root_node);
}
+ template<typename It, typename ProvideMetadataFunction>
+ BaseType& insert(
+ const It& begin, const It& end, MetadataType metadata, ProvideMetadataFunction provide_missing_metadata) requires(!IsSame<MetadataType, decltype(nullptr)>::value)
+ {
+ auto it = begin;
+ return insert(it, end, move(metadata), move(provide_missing_metadata));
+ }
+
+ template<typename It>
+ BaseType& insert(const It& begin, const It& end) requires(IsSame<MetadataType, decltype(nullptr)>::value)
+ {
+ auto it = begin;
+ return insert(it, end);
+ }
+
ConstIterator begin() const { return ConstIterator(*this); }
ConstIterator end() const { return ConstIterator::end(); }