UNPKG

1.93 kBJavaScriptView Raw
1"use strict";
2
3var 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
16PrimitiveSetIterator = 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};
24if (setPrototypeOf) setPrototypeOf(PrimitiveSetIterator, Iterator);
25
26PrimitiveSetIterator.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);
55Object.defineProperty(PrimitiveSetIterator.prototype, toStringTagSymbol, d("c", "Set Iterator"));