UNPKG

@andranik-arakelyan/js-utilities

Version:
1 lines 878 B
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.MultiSet=void 0;class MultiSet{map=new Map;add(item,count=1){if(count===0)return;const current=this.map.get(item)||0;const next=current+count;if(next>0){this.map.set(item,next)}else{this.map.delete(item)}}remove(item,count=1){if(count<0){this.add(item,-count);return}if(!this.map.has(item))return;const current=this.map.get(item);if(count>=current){this.map.delete(item)}else{this.map.set(item,current-count)}}count(item){return this.map.get(item)||0}has(item){return this.map.has(item)}size(){let total=0;for(const v of this.map.values())total+=v;return total}uniqueSize(){return this.map.size}clear(){this.map.clear()}toArray(){const arr=[];for(const[item,count]of this.map.entries()){for(let i=0;i<count;i++)arr.push(item)}return arr}entries(){return this.map.entries()}}exports.MultiSet=MultiSet;