import type { Node } from "@tsplus/stdlib/collections/RedBlackTree/node" /** * Visit nodes greater than or equal to key. * * @tsplus static RedBlackTree.Ops visitGe */ export function visitGe( node: Node, min: K, ord: Ord, visit: (key: K, value: V) => Maybe ): Maybe { let current: Node | undefined = node let stack: Stack> | undefined = undefined let done = false while (!done) { if (current) { stack = new Stack(current, stack) if (ord.compare(min, current.key) <= 0) { current = current.left } else { current = undefined } } else if (stack) { if (ord.compare(min, stack.value.key) <= 0) { const v = visit(stack.value.key, stack.value.value) if (v.isSome()) { return v } } current = stack.value.right stack = stack.previous } else { done = true } } return Maybe.none }