packages/core/src/format/EnumMap.js
/*
* @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper
* @license BSD-3-Clause (see LICENSE in the root directory of this source tree)
*/
/**
* @private
*/
export class EnumMap {
constructor(){
this._map = {};
}
putAll(otherMap){
for(const key in otherMap._map){
this._map[key] = otherMap._map[key];
}
return this;
}
containsKey(key){
// eslint-disable-next-line no-prototype-builtins
return (this._map.hasOwnProperty(key.name())) && (this.get(key) !== undefined);
}
get(key) {
return this._map[key.name()];
}
put(key, val) {
return this.set(key, val);
}
set(key, val) {
this._map[key.name()] = val;
return this;
}
retainAll(keyList){
const map = {};
for(let i=0; i<keyList.length; i++){
const key = keyList[i].name();
map[key] = this._map[key];
}
this._map = map;
return this;
}
/**
* due to the bad performance of delete we just set the key entry to undefined.
*
* this might lead to issues with "null" entries. Calling clear in the end might solve the issue
* @param key
* @returns {*}
*/
remove(key){
const keyName = key.name();
const val = this._map[keyName];
this._map[keyName] = undefined;
return val;
}
keySet(){
return this._map;
}
clear(){
this._map = {};
}
}