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