From 908d5a285306cb227f5fca07a1443cbd482092be Mon Sep 17 00:00:00 2001 From: Tim Schumacher Date: Wed, 20 Apr 2022 18:42:30 +0200 Subject: [PATCH] AK: Expose RedBlackTree::find_smallest_not_below() --- AK/IntrusiveRedBlackTree.h | 9 +++++++++ AK/RedBlackTree.h | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/AK/IntrusiveRedBlackTree.h b/AK/IntrusiveRedBlackTree.h index 1a40804536..6b1442f1fc 100644 --- a/AK/IntrusiveRedBlackTree.h +++ b/AK/IntrusiveRedBlackTree.h @@ -55,6 +55,14 @@ public: return node_to_value(*node); } + Container find_smallest_not_below(K key) + { + auto* node = static_cast(BaseTree::find_smallest_not_below(this->m_root, key)); + if (!node) + return nullptr; + return node_to_value(*node); + } + void insert(K key, V& value) { auto& node = value.*member; @@ -208,6 +216,7 @@ class IntrusiveRedBlackTree, member> : public IntrusiveRe public: [[nodiscard]] NonnullRefPtr find(K key) const { return IntrusiveRedBlackTree, member>::find(key).release_nonnull(); } [[nodiscard]] NonnullRefPtr find_largest_not_above(K key) const { return IntrusiveRedBlackTree, member>::find_largest_not_above(key).release_nonnull(); } + [[nodiscard]] NonnullRefPtr find_smallest_not_below(K key) const { return IntrusiveRedBlackTree, member>::find_smallest_not_below(key).release_nonnull(); } }; } diff --git a/AK/RedBlackTree.h b/AK/RedBlackTree.h index 11994bd4b4..8106b70d99 100644 --- a/AK/RedBlackTree.h +++ b/AK/RedBlackTree.h @@ -467,6 +467,14 @@ public: return &node->value; } + [[nodiscard]] V* find_smallest_not_below(K key) + { + auto* node = static_cast(BaseTree::find_smallest_not_below(this->m_root, key)); + if (!node) + return nullptr; + return &node->value; + } + ErrorOr try_insert(K key, V const& value) { return try_insert(key, V(value));