import { ForeachMapAction, IMap } from "./IMap"; export class NumMap implements IMap{ private items: { [index: number]: T } = {}; private count: number = 0; public Count(): number { return this.count; } public Add(key: number, value: T): T { if (!this.items.hasOwnProperty(key.toString())) this.count++; this.items[key] = value; return value; } public Remove(key: number): T { var val = this.items[key]; delete this.items[key]; this.count--; return val; } public ContainsKey(key: number): boolean { return this.items.hasOwnProperty(key.toString()); } public Value(key: number): T { return this.items[key]; } public Replace(key: number, value: T): boolean { if (this.ContainsKey(key)) { this.items[key] = value; return true; } return false; } public Keys(): number[] { var keys: number[] = []; for (var prop in this.items) { if (this.items.hasOwnProperty(prop)) { keys.push(Number(prop)); } } return keys; } public Values(): T[] { var values: T[] = []; for (var prop in this.items) { if (this.items.hasOwnProperty(prop)) { values.push(this.items[prop]); } } return values; } public Foreach(callback: ForeachMapAction, thisArg?: any): void { if (callback) { for (var prop in this.items) { var key = Number(prop); callback.call(thisArg, key, this.items[prop]); } } } public Clear(): void { this.items = {}; this.count = 0; } }