import "../../../Operator/index.js"; import * as O from "../../../Option/index.js"; import type * as Ord from "../../../Ord/index.js"; import * as St from "../../../Structural/index.js"; import * as A from "../Array/index.js"; import * as Tp from "../Tuple/index.js"; declare type Color = "Red" | "Black"; declare class Node { color: Color; key: K; value: V; left: Node | undefined; right: Node | undefined; count: number; constructor(color: Color, key: K, value: V, left: Node | undefined, right: Node | undefined, count: number); } /** * A Red-Black Tree Iterable */ export interface RedBlackTreeIterable extends Iterable { readonly ord: Ord.Ord; [Symbol.iterator](): RedBlackTreeIterator; } /** * A Red-Black Tree */ export declare class RedBlackTree implements RedBlackTreeIterable { readonly ord: Ord.Ord; readonly root: Node | undefined; readonly _K: () => K; readonly _V: () => V; constructor(ord: Ord.Ord, root: Node | undefined); [Symbol.iterator](): RedBlackTreeIterator; get [St.hashSym](): number; [St.equalsSym](that: unknown): boolean; } /** * Creates a new Red-Black Tree */ export declare function make(ord: Ord.Ord): RedBlackTree; /** * Returns the length of the tree */ export declare function size(self: RedBlackTree): number; /** * Insert a new item into the tree */ export declare function insert_(self: RedBlackTree, key: K, value: V): RedBlackTree; /** * Insert a new item into the tree */ export declare function insert(key: K, value: V): (self: RedBlackTree) => RedBlackTree; /** * Visit all nodes inorder until a Some is returned */ export declare function visitFull(node: Node, visit: (key: K, value: V) => O.Option): O.Option; /** * Visit each node of the tree in order */ export declare function forEach_(self: RedBlackTree, visit: (key: K, value: V) => void): void; /** * Visit each node of the tree in order */ export declare function forEach(visit: (key: K, value: V) => void): (self: RedBlackTree) => void; /** * Visit nodes greater than or equal to key */ export declare function visitGe(node: Node, min: K, ord: Ord.Ord, visit: (key: K, value: V) => O.Option): O.Option; /** * Visit each node of the tree in order with key greater then or equal to max */ export declare function forEachGe_(self: RedBlackTree, min: K, visit: (key: K, value: V) => void): void; /** * Visit each node of the tree in order with key greater then or equal to max */ export declare function forEachGe(min: K, visit: (key: K, value: V) => void): (self: RedBlackTree) => void; /** * Visit nodes lower than key */ export declare function visitLt(node: Node, max: K, ord: Ord.Ord, visit: (key: K, value: V) => O.Option): O.Option; /** * Visit each node of the tree in order with key lower then max */ export declare function forEachLt_(self: RedBlackTree, max: K, visit: (key: K, value: V) => void): void; /** * Visit each node of the tree in order with key lower then max */ export declare function forEachLt(max: K, visit: (key: K, value: V) => void): (self: RedBlackTree) => void; /** * Visit nodes with key lower than max and greater then or equal to min */ export declare function visitBetween(node: Node, min: K, max: K, ord: Ord.Ord, visit: (key: K, value: V) => O.Option): O.Option; /** * Visit each node of the tree in order with key lower than max and greater then or equal to min */ export declare function forEachBetween_(self: RedBlackTree, min: K, max: K, visit: (key: K, value: V) => void): void; /** * Visit each node of the tree in order with key lower than max and greater then or equal to min */ export declare function forEachBetween(min: K, max: K, visit: (key: K, value: V) => void): (self: RedBlackTree) => void; export declare type Direction = "Forward" | "Backward"; /** * Stateful iterator */ export declare class RedBlackTreeIterator implements Iterator { readonly self: RedBlackTree; readonly stack: Node[]; readonly direction: Direction; private count; constructor(self: RedBlackTree, stack: Node[], direction: Direction); /** * Clones the iterator */ clone(): RedBlackTreeIterator; /** * Reverse the traversal direction */ reversed(): RedBlackTreeIterator; /** * Iterator next */ next(): IteratorResult; /** * Returns the key */ get key(): O.Option; /** * Returns the value */ get value(): O.Option; /** * Returns the key */ get entry(): O.Option; /** * Returns the position of this iterator in the sorted list */ get index(): number; /** * Advances iterator to next element in list */ moveNext(): void; /** * Checks if there is a next element */ get hasNext(): boolean; /** * Advances iterator to previous element in list */ movePrev(): void; /** * Checks if there is a previous element */ get hasPrev(): boolean; } /** * Returns the first entry in the tree */ export declare function getFirst(tree: RedBlackTree): O.Option>; /** * Returns the last entry in the tree */ export declare function getLast(tree: RedBlackTree): O.Option>; /** * Returns an iterator that points to the element i of the tree */ export declare function at_(tree: RedBlackTree, idx: number, direction?: Direction): RedBlackTreeIterable; /** * Returns an iterator that points to the element i of the tree */ export declare function at(idx: number): (tree: RedBlackTree) => RedBlackTreeIterable; /** * Returns the element i of the tree */ export declare function getAt_(tree: RedBlackTree, idx: number): O.Option>; /** * Returns the element i of the tree */ export declare function getAt(idx: number): (tree: RedBlackTree) => O.Option>; /** * Returns an iterator that traverse entries with keys less then or equal to key */ export declare function le_(tree: RedBlackTree, key: K, direction?: Direction): RedBlackTreeIterable; /** * Returns an iterator that traverse entries with keys less then or equal to key */ export declare function le(key: K, direction?: Direction): (tree: RedBlackTree) => RedBlackTreeIterable; /** * Returns an iterator that traverse entries with keys less then key */ export declare function lt_(tree: RedBlackTree, key: K, direction?: Direction): RedBlackTreeIterable; /** * Returns an iterator that traverse entries with keys less then key */ export declare function lt(key: K, direction?: Direction): (tree: RedBlackTree) => RedBlackTreeIterable; /** * Returns an iterator that traverse entries with keys greater then or equal to key */ export declare function ge_(tree: RedBlackTree, key: K, direction?: Direction): RedBlackTreeIterable; /** * Returns an iterator that traverse entries with keys greater then or equal to key */ export declare function ge(key: K, direction?: Direction): (tree: RedBlackTree) => RedBlackTreeIterable; /** * Returns an iterator that traverse entries with keys greater then or equal to key */ export declare function gt_(tree: RedBlackTree, key: K, direction?: Direction): RedBlackTreeIterable; /** * Returns an iterator that traverse entries with keys greater then or equal to key */ export declare function gt(key: K, direction?: Direction): (tree: RedBlackTree) => RedBlackTreeIterable; /** * Traverse the tree backwards */ export declare function backwards(self: RedBlackTree): RedBlackTreeIterable; /** * Get the values of the tree */ export declare function values_(self: RedBlackTree, direction?: Direction): IterableIterator; /** * Get the values of the tree */ export declare function values(direction?: Direction): (self: RedBlackTree) => Iterable; /** * Get the keys of the tree */ export declare function keys_(self: RedBlackTree, direction?: Direction): IterableIterator; /** * Get the keys of the tree */ export declare function keys(direction?: Direction): (self: RedBlackTree) => IterableIterator; /** * Constructs a new tree from an iterable of key-value pairs */ export declare function from(iterable: RedBlackTreeIterable): RedBlackTree; export declare function from(iterable: Iterable, ord: Ord.Ord): RedBlackTree; /** * Finds the item with key if it exists */ export declare function find_(tree: RedBlackTree, key: K): A.Array; /** * Finds the item with key if it exists */ export declare function find(key: K): (tree: RedBlackTree) => A.Array; /** * Finds the item with key if it exists */ export declare function findFirst_(tree: RedBlackTree, key: K): O.Option; /** * Finds the item with key if it exists */ export declare function findFirst(key: K): (tree: RedBlackTree) => O.Option; /** * Finds the item with key if it exists */ export declare function has_(tree: RedBlackTree, key: K): boolean; /** * Finds the item with key if it exists */ export declare function has(key: K): (tree: RedBlackTree) => boolean; /** * Removes entry with key */ export declare function removeFirst_(self: RedBlackTree, key: K): RedBlackTree; /** * Removes entry with key */ export declare function removeFirst(key: K): (tree: RedBlackTree) => RedBlackTree; /** * Reduce a state over the map entries */ export declare function reduceWithIndex_(map: RedBlackTree, z: Z, f: (z: Z, k: K, v: V) => Z): Z; /** * Reduce a state over the map entries * * @ets_data_first reduceWithIndex_ */ export declare function reduceWithIndex(z: Z, f: (z: Z, k: K, v: V) => Z): (map: RedBlackTree) => Z; /** * Reduce a state over the map entries */ export declare function reduce_(map: RedBlackTree, z: Z, f: (z: Z, v: V) => Z): Z; /** * Reduce a state over the map entries * * @ets_data_first reduceWithIndex_ */ export declare function reduce(z: Z, f: (z: Z, v: V) => Z): (map: RedBlackTree) => Z; export {}; //# sourceMappingURL=index.d.ts.map