cytoscape
Version:
Graph theory (a.k.a. network) library for analysis and visualisation
65 lines (49 loc) • 1.14 kB
JavaScript
/* global Set */
const undef = typeof undefined;
class ObjectSet {
constructor( arrayOrObjectSet ){
this._obj = Object.create(null);
this.size = 0;
if( arrayOrObjectSet != null ){
let arr;
if( arrayOrObjectSet.instanceString != null && arrayOrObjectSet.instanceString() === this.instanceString() ){
arr = arrayOrObjectSet.toArray();
} else {
arr = arrayOrObjectSet;
}
for( let i = 0; i < arr.length; i++ ){
this.add( arr[i] );
}
}
}
instanceString(){
return 'set';
}
add( val ){
let o = this._obj;
if( o[ val ] !== 1 ){
o[ val ] = 1;
this.size++;
}
}
delete( val ){
let o = this._obj;
if( o[ val ] === 1 ){
o[ val ] = 0;
this.size--;
}
}
clear(){
this._obj = Object.create(null);
}
has( val ){
return this._obj[ val ] === 1;
}
toArray(){
return Object.keys( this._obj ).filter( key => this.has(key) );
}
forEach( callback, thisArg ){
return this.toArray().forEach( callback, thisArg );
}
}
export default typeof Set !== undef ? Set : ObjectSet;