immutable-js
Version:
Immutable types in JavaScript
64 lines (54 loc) • 1.54 kB
JavaScript
import { SetCollection } from './Collection';
import { NativeObject, isNative } from './Native';
export var SET_TYPEDEF = '[SetCollection Set]';
export class Set extends SetCollection {
constructor(object) {
return makeSet(object);
}
toSet() {
return this;
}
toString() {
return this.__toString('Set {', this.__keys.join(','), '}');
}
set(key) {
var copy = this.__internal.__clone();
copy[key] = true;
console.log(copy);
return new Set(
);
}
unset(key) {
var reduc = delete this.__internal.clone()[key];
return new Set(reduc);
}
__iterate(handle, reverse) {
var object = this.__internal;
var keys = this.__keys;
var maxIndex = keys.length - 1;
for(var n = 0; n <= maxIndex; n++) {
let key = keys[reverse ? maxIndex - n: n];
if(handle(object[key], key, this) === false) {
return n + 1;
}
}
return n;
}
}
var EMPTY_SET;
function emptySet() {
return EMPTY_SET || (EMPTY_SET = makeSet());
}
function makeSet(map, ownerID) {
var set = Object.create(Set.prototype);
set.__internal = new NativeObject();
set.__ownerID = ownerID;
if(map && isNative(map)) {
set.__internal = map;
} else if(map && typeof map === 'object') {
set.__internal = set.__internal.extend(map);
}
set.__keys = Object.keys(set.__internal);
set.size = set.__keys.length;
return set;
}