/** * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal */ import { iterableToArray } from '../util' /** Immutable by convention IntMap */ interface IntMap { keys(): IterableIterator, values(): IterableIterator, get(key: number): T, readonly size: number } namespace IntMap { export interface Mutable extends IntMap { set(key: number, value: T): void; } export function keyArray(map: IntMap): number[] { return iterableToArray(map.keys()); } export function ofObj(obj: { [key: number]: T }): IntMap { const keys = Object.keys(obj); const ret = new Map(); for (let i = 0, _i = keys.length; i < _i; i++) { const k = keys[i]; ret.set(+k, obj[k as any]); } return ret as IntMap; } export function Mutable(): Mutable { return new Map() as Mutable; } export function asImmutable(map: IntMap): IntMap { return map; } } export default IntMap;