1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 12:17:44 +00:00

AK: Expose RedBlackTree::find_smallest_not_below()

This commit is contained in:
Tim Schumacher 2022-04-20 18:42:30 +02:00 committed by Andreas Kling
parent 02c18bf6de
commit 908d5a2853
2 changed files with 17 additions and 0 deletions

View file

@ -55,6 +55,14 @@ public:
return node_to_value(*node); return node_to_value(*node);
} }
Container find_smallest_not_below(K key)
{
auto* node = static_cast<TreeNode*>(BaseTree::find_smallest_not_below(this->m_root, key));
if (!node)
return nullptr;
return node_to_value(*node);
}
void insert(K key, V& value) void insert(K key, V& value)
{ {
auto& node = value.*member; auto& node = value.*member;
@ -208,6 +216,7 @@ class IntrusiveRedBlackTree<K, V, NonnullRefPtr<V>, member> : public IntrusiveRe
public: public:
[[nodiscard]] NonnullRefPtr<V> find(K key) const { return IntrusiveRedBlackTree<K, V, RefPtr<V>, member>::find(key).release_nonnull(); } [[nodiscard]] NonnullRefPtr<V> find(K key) const { return IntrusiveRedBlackTree<K, V, RefPtr<V>, member>::find(key).release_nonnull(); }
[[nodiscard]] NonnullRefPtr<V> find_largest_not_above(K key) const { return IntrusiveRedBlackTree<K, V, RefPtr<V>, member>::find_largest_not_above(key).release_nonnull(); } [[nodiscard]] NonnullRefPtr<V> find_largest_not_above(K key) const { return IntrusiveRedBlackTree<K, V, RefPtr<V>, member>::find_largest_not_above(key).release_nonnull(); }
[[nodiscard]] NonnullRefPtr<V> find_smallest_not_below(K key) const { return IntrusiveRedBlackTree<K, V, RefPtr<V>, member>::find_smallest_not_below(key).release_nonnull(); }
}; };
} }

View file

@ -467,6 +467,14 @@ public:
return &node->value; return &node->value;
} }
[[nodiscard]] V* find_smallest_not_below(K key)
{
auto* node = static_cast<Node*>(BaseTree::find_smallest_not_below(this->m_root, key));
if (!node)
return nullptr;
return &node->value;
}
ErrorOr<void> try_insert(K key, V const& value) ErrorOr<void> try_insert(K key, V const& value)
{ {
return try_insert(key, V(value)); return try_insert(key, V(value));