tson-rpc
Version:
Connect objects anywhere in pairs like quantum entanglement.
71 lines (69 loc) • 1.75 kB
text/typescript
// Copyright (c) 2022 System233
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
export class BiMap<K,T>{
map:Map<K,T>=new Map;
imap:Map<T,K>=new Map;
constructor(pairs?:[K,T][]){
if(pairs!=null){
pairs.forEach(([key,value])=>this.set(key,value));
}
}
has(key:K){
return this.hasKey(key);
}
hasKey(key:K){
return this.map.has(key);
}
hasValue(value:T){
return this.imap.has(value);
}
get(key:K):T{
return this.getByKey(key);
}
getByKey(key:K):T{
return this.map.get(key) as T;
}
getByValue(value:T):K{
return this.imap.get(value) as K;
}
set(key:K,value:T){
this.map.set(key,value);
this.imap.set(value,key);
}
delete(key:K){
return this.deleteKey(key);
}
deleteBoth(key:K,value:T){
if(this.hasKey(key)&&this.hasValue(value)){
return this.map.delete(key)&&this.imap.delete(value);
}
return true;
}
deleteKey(key:K){
return this.deleteBoth(key,this.getByKey(key));
}
deleteValue(value:T){
return this.deleteBoth(this.getByValue(value),value);
}
clear(){
this.map.clear();
this.imap.clear();
}
forEach(callbackfn: (value: T, key: K, map: Map<K, T>) => void, thisArg?: any){
return this.map.forEach(callbackfn,thisArg);
}
entries(){
return this.map.entries();
}
keys(){
return this.map.keys();
}
values(){
return this.map.values();
}
get size(){
return this.map.size;
}
};