import { IRectangle } from '../IRectangle';
import { HitTestBehavior } from './HitTestBehavior';
export declare function CreateRectangleNodeOnListOfNodes<T, P>(nodes: RectangleNode<T, P>[]): RectangleNode<T, P>;
export declare function CreateRectangleNodeOnEnumeration<T, P>(nodes: Array<RectangleNode<T, P>>): RectangleNode<T, P>;
export declare function CreateRectangleNodeOnData<T, P>(dataEnumeration: Iterable<T>, rectangleDelegate: (t: T) => IRectangle<P>): RectangleNode<T, P>;
export declare function mkRectangleNodeWithCount<T, P>(count: number): RectangleNode<T, P>;
export declare function mkRectangleNode<T, P>(data: T, rect: IRectangle<P>): RectangleNode<T, P>;
export declare class RectangleNode<T, P> {
    UserData: T;
    Count: number;
    left: RectangleNode<T, P>;
    right: RectangleNode<T, P>;
    irect: IRectangle<P>;
    toString(): string;
    Parent: RectangleNode<T, P>;
    get IsLeaf(): boolean;
    get Left(): RectangleNode<T, P>;
    set Left(value: RectangleNode<T, P>);
    get Right(): RectangleNode<T, P>;
    set Right(value: RectangleNode<T, P>);
    get IsLeftChild(): boolean;
    FirstHitNodePF(point: P, hitTestForPointDelegate: (point: P, data: T) => HitTestBehavior): RectangleNode<T, P>;
    FirstIntersectedNode(r: IRectangle<P>): RectangleNode<T, P>;
    FirstHitNodeWithPredicate(point: P, hitTest: (p: P, t: T) => HitTestBehavior): RectangleNode<T, P>;
    FirstHitNode(point: P): RectangleNode<T, P>;
    AllHitItems(rectanglePar: IRectangle<P>, hitTestAccept: (data: T) => boolean): IterableIterator<T>;
    AllHitItems_(point: P): IterableIterator<T>;
    VisitTree(hitTest: (data: T) => HitTestBehavior, hitRectangle: IRectangle<P>): void;
    Clone(): RectangleNode<T, P>;
    GetNodeItemsIntersectingRectangle(rectanglePar: IRectangle<P>): Generator<T, void, unknown>;
    GetLeafRectangleNodesIntersectingRectangle(rectanglePar: IRectangle<P>): IterableIterator<RectangleNode<T, P>>;
    GetAllLeaves(): IterableIterator<T>;
    GetAllLeafNodes(): IterableIterator<RectangleNode<T, P>>;
    EnumRectangleNodes(leafOnly: boolean): IterableIterator<RectangleNode<T, P>>;
    TraverseHierarchy(node: RectangleNode<T, P>, visitor: (n: RectangleNode<T, P>) => void): void;
}
