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() { // nothing here } /** * add object to Objectmap * returns false if the object is already in the map * returns true if the object was added successfully */ add(objectArg: T): boolean { if (this.checkForObject(objectArg)) { // the object is already in the objectmap return false; } else { // the object is not yet in the objectmap this.objectArray.push(objectArg); return true; } } /** * 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; } } /** * finds a specific element and then removes it */ findOneAndRemove(findFunction: IObjectmapFindFunction): T { let foundElement = this.find(findFunction); if (foundElement) { this.remove(foundElement); } return foundElement; } /** * run function for each item in Objectmap */ async forEach(functionArg: IObjectmapForEachFunction) { for (let object of this.objectArray) { await functionArg(object); } } /** * gets an object in the Observablemap and removes it, so it can't be retrieved again */ getOneAndRemove(): T { return this.objectArray.shift(); } /** * returns a cloned array of all the objects currently in the Objectmap */ getArray() { return plugins.lodash.cloneDeep(this.objectArray); } /** * check if Objectmap ist empty */ isEmpty(): boolean { if (this.objectArray.length === 0) { return true; } else { return false; } } /** * 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 = []; } }