UNPKG

ts-hashlife

Version:

Efficient TypeScript implementation of HashLife, an optimized algorithm for simulating Conway's Game of Life with memoization and quadtree-based compression.

108 lines (107 loc) 3.96 kB
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; }