import FilterRule = require("./FilterRule"); import DataModel = require("./DataModel"); class FilterCollection { private filterRules:FilterRule[] = new Array() public addFilter(filter:FilterRule|FilterRule[]) { this.filterRules = this.filterRules.concat(filter) } public setFilter(filter:FilterRule|FilterRule[]) { this.clearList() this.addFilter(filter) } private clearList() { this.filterRules.length = 0 } public runFilters(allEntities:T[]):T[] { let filteredEntities:T[] = allEntities.slice(0) // Attention // The idea of tweaking the performance by reordering the filterRules // may not give correct results, since some FilterRules depend on the order (i.e. FilterRuleMax). // Before implementing, we would have to prove, that our result is deterministically the same. this.filterRules.forEach((filterRule:FilterRule) => { filteredEntities = filterRule.filter(filteredEntities) as T[] }) return filteredEntities.slice(0) } public getFilterRules():FilterRule[] { return this.filterRules } } export = FilterCollection