-
-
Notifications
You must be signed in to change notification settings - Fork 9
/
primitive-iterator.js
55 lines (52 loc) · 1.88 KB
/
primitive-iterator.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
"use strict";
var clear = require("es5-ext/array/#/clear")
, assign = require("es5-ext/object/assign")
, setPrototypeOf = require("es5-ext/object/set-prototype-of")
, contains = require("es5-ext/string/#/contains")
, d = require("d")
, autoBind = require("d/auto-bind")
, Iterator = require("es6-iterator")
, toStringTagSymbol = require("es6-symbol").toStringTag
, defineProperties = Object.defineProperties
, keys = Object.keys
, unBind = Iterator.prototype._unBind
, PrimitiveSetIterator;
PrimitiveSetIterator = module.exports = function (set, kind) {
if (!(this instanceof PrimitiveSetIterator)) {
return new PrimitiveSetIterator(set, kind);
}
Iterator.call(this, keys(set.__setData__), set);
kind = !kind || !contains.call(kind, "key+value") ? "value" : "key+value";
return defineProperties(this, { __kind__: d("", kind), __data__: d("w", set.__setData__) });
};
if (setPrototypeOf) setPrototypeOf(PrimitiveSetIterator, Iterator);
PrimitiveSetIterator.prototype = Object.create(
Iterator.prototype,
assign(
{
constructor: d(PrimitiveSetIterator),
_resolve: d(function (i) {
var value = this.__data__[this.__list__[i]];
return this.__kind__ === "value" ? value : [value, value];
}),
_unBind: d(function () {
this.__data__ = null;
unBind.call(this);
}),
toString: d(function () { return "[object Set Iterator]"; })
},
autoBind({
_onAdd: d(function (key) { this.__list__.push(key); }),
_onDelete: d(function (key) {
var index = this.__list__.lastIndexOf(key);
if (index < this.__nextIndex__) return;
this.__list__.splice(index, 1);
}),
_onClear: d(function () {
clear.call(this.__list__);
this.__nextIndex__ = 0;
})
})
)
);
Object.defineProperty(PrimitiveSetIterator.prototype, toStringTagSymbol, d("c", "Set Iterator"));