diff --git a/AK/RedBlackTree.h b/AK/RedBlackTree.h index 5a4d2c3d484..60033af3ca2 100644 --- a/AK/RedBlackTree.h +++ b/AK/RedBlackTree.h @@ -505,6 +505,22 @@ public: Iterator end() { return {}; } Iterator begin_from(K key) { return Iterator(static_cast(BaseTree::find(this->m_root, key))); } + Iterator find_largest_not_above_iterator(K key) + { + auto node = static_cast(BaseTree::find_largest_not_above(this->m_root, key)); + if (!node) + return end(); + return Iterator(node, static_cast(BaseTree::predecessor(node))); + } + + Iterator find_smallest_not_below_iterator(K key) + { + auto node = static_cast(BaseTree::find_smallest_not_below(this->m_root, key)); + if (!node) + return end(); + return Iterator(node, static_cast(BaseTree::predecessor(node))); + } + using ConstIterator = RedBlackTreeIterator; friend ConstIterator; ConstIterator begin() const { return ConstIterator(static_cast(this->m_minimum)); }