export declare class TreeNode {
    nw: TreeNode | null;
    ne: TreeNode | null;
    sw: TreeNode | null;
    se: TreeNode | null;
    id: number;
    level: number;
    population: number;
    cache: TreeNode | null;
    quick_cache: TreeNode | null;
    hashmap_next: TreeNode | undefined;
    constructor(nw: TreeNode | null, ne: TreeNode | null, sw: TreeNode | null, se: TreeNode | null, id: number, level?: number, population?: number);
}
export declare class LifeUniverse {
    last_id: number;
    hashmap_size: number;
    max_load: number;
    hashmap: (TreeNode | undefined)[];
    empty_tree_cache: TreeNode[];
    level2_cache: (TreeNode | undefined)[];
    _powers: Float64Array;
    _bitcounts: Int8Array;
    rule_b: number;
    rule_s: number;
    root: TreeNode | null;
    rewind_state: TreeNode | null;
    false_leaf: TreeNode;
    true_leaf: TreeNode;
    private _step;
    private _generation;
    constructor();
    get step(): number;
    set step(value: number);
    get generation(): number;
    set generation(value: number);
    pow2(x: number): number;
    save_rewind_state(): void;
    restore_rewind_state(): void;
    eval_mask(bitmask: number): number;
    level1_create(bitmask: number): TreeNode;
    set_bit(x: number, y: number, living: boolean): void;
    get_bit(x: number, y: number): boolean;
    get_root_bounds(): {
        top: number;
        left: number;
        bottom: number;
        right: number;
    };
    empty_tree(level: number): TreeNode;
    expand_universe(node: TreeNode): TreeNode;
    uncache(also_quick: boolean): void;
    in_hashmap(n: TreeNode): boolean;
    hashmap_insert(n: TreeNode): void;
    create_tree(nw: TreeNode, ne: TreeNode, sw: TreeNode, se: TreeNode): TreeNode;
    next_generation(is_single: boolean): void;
    garbage_collect(): void;
    calc_hash(nw_id: number, ne_id: number, sw_id: number, se_id: number): number;
    clear_pattern(): void;
    get_bounds(field_x: Int32Array | number[], field_y: Int32Array | number[]): {
        top: number;
        left: number;
        bottom: number;
        right: number;
    };
    get_level_from_bounds(bounds: {
        x?: number;
        y?: number;
        left?: number;
        top?: number;
        bottom?: number;
        right?: number;
    }): number;
    make_center(field_x: Int32Array | number[], field_y: Int32Array | number[], bounds: {
        left: number;
        right: number;
        top: number;
        bottom: number;
    }): void;
    move_field(field_x: Int32Array | number[], field_y: Int32Array | number[], offset_x: number, offset_y: number): void;
    setup_field(field_x: Int32Array | number[], field_y: Int32Array | number[], bounds?: {
        left: number;
        right: number;
        top: number;
        bottom: number;
    }): void;
    partition(start: number, end: number, test_field: Int32Array | number[], other_field: Int32Array | number[], offset: number): number;
    setup_field_recurse(start: number, end: number, field_x: Int32Array | number[], field_y: Int32Array | number[], level: number): TreeNode;
    level2_setup(start: number, end: number, field_x: Int32Array | number[], field_y: Int32Array | number[]): TreeNode;
    set_step(step: number): void;
    set_rules(s: number, b: number): void;
    node_set_bit(node: TreeNode, x: number, y: number, living: boolean): TreeNode;
    node_get_bit(node: TreeNode, x: number, y: number): boolean;
    node_get_field(node: TreeNode, left: number, top: number, field: {
        x: number;
        y: number;
    }[]): void;
    node_level2_next(node: TreeNode): TreeNode;
    node_next_generation(node: TreeNode): TreeNode;
    node_quick_next_generation(node: TreeNode): TreeNode;
    node_hash(node: TreeNode): void;
    node_get_boundary(node: TreeNode, left: number, top: number, find_mask: number, boundary: {
        top: number;
        left: number;
        bottom: number;
        right: number;
    }): void;
}
