import { Option, Dict, dict, HAS_NATIVE_WEAKMAP } from '@glimmer/util'; export const EMPTY_ARRAY = HAS_NATIVE_WEAKMAP ? Object.freeze([]) : []; export const EMPTY_DICT: Dict = HAS_NATIVE_WEAKMAP ? Object.freeze(dict()) : dict(); export interface EnumerableCallback { (item: T): void; } export interface Enumerable { forEach(callback: EnumerableCallback): void; } export interface Destroyable { destroy(): void; } export interface Range { min(): number; max(): number; at(index: number): Option; } export class ListRange implements Range { private list: T[]; // [start, end] private start: number; private end: number; constructor(list: T[], start: number, end: number) { this.list = list; this.start = start; this.end = end; } at(index: number): Option { if (index >= this.list.length) return null; return this.list[index]; } min(): number { return this.start; } max(): number { return this.end; } }