import * as plugins from './lik.plugins' export interface IObjectmapForEachFunction { (itemArg: T): void } export interface IObjectmapFindFunction { (itemArg: T): boolean } /** * allows keeping track of objects */ export class Objectmap { private objectArray: T[] = [] /** * returns a new instance */ constructor() { } /** * add object to Objectmap */ add(objectArg: T) { this.objectArray.push(objectArg) } /** * like .add but adds an whole array of objects */ addArray(objectArrayArg: T[]) { for (let item of objectArrayArg) { this.add(item) } } /** * check if object is in Objectmap */ checkForObject(objectArg: T) { return this.objectArray.indexOf(objectArg) !== -1 } /** * find object */ find(findFunction: IObjectmapFindFunction) { let resultArray = this.objectArray.filter(findFunction) if (resultArray.length > 0) { return resultArray[0] } else { return null } } /** * run function for each item in Objectmap */ forEach(functionArg: IObjectmapForEachFunction) { return this.objectArray.forEach(functionArg) } /** * gets an object in the Observablemap and removes it, so it can't be retrieved again */ getOneAndRemove(): T { return this.objectArray.shift() } /** * finds a specific element and then removes it */ findOneAndRemove(findFunction): T { let foundElement = this.find(findFunction) if (foundElement) { this.remove(foundElement) } return foundElement } /** * returns a cloned array of all the objects currently in the Objectmap */ getArray() { return plugins.lodash.cloneDeep(this.objectArray) } /** * remove object from Objectmap */ remove(objectArg: T) { let replacementArray = [] for (let item of this.objectArray) { if (item !== objectArg) { replacementArray.push(item) } } this.objectArray = replacementArray } /** * wipe Objectmap */ wipe() { this.objectArray = [] } }