You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.1 KiB
40 lines
1.1 KiB
"use strict"; |
|
|
|
var setPrototypeOf = require("es5-ext/object/set-prototype-of") |
|
, d = require("d") |
|
, Iterator = require("../") |
|
, validIterable = require("../valid-iterable") |
|
|
|
, push = Array.prototype.push |
|
, defineProperties = Object.defineProperties |
|
, IteratorChain; |
|
|
|
IteratorChain = function (iterators) { |
|
defineProperties(this, { |
|
__iterators__: d("", iterators), |
|
__current__: d("w", iterators.shift()) |
|
}); |
|
}; |
|
if (setPrototypeOf) setPrototypeOf(IteratorChain, Iterator); |
|
|
|
IteratorChain.prototype = Object.create(Iterator.prototype, { |
|
constructor: d(IteratorChain), |
|
next: d(function () { |
|
var result; |
|
if (!this.__current__) return { done: true, value: undefined }; |
|
result = this.__current__.next(); |
|
while (result.done) { |
|
this.__current__ = this.__iterators__.shift(); |
|
if (!this.__current__) return { done: true, value: undefined }; |
|
result = this.__current__.next(); |
|
} |
|
return result; |
|
}) |
|
}); |
|
|
|
module.exports = function () { |
|
var iterators = [this]; |
|
push.apply(iterators, arguments); |
|
iterators.forEach(validIterable); |
|
return new IteratorChain(iterators); |
|
};
|
|
|