mirror of https://github.com/lukechilds/node.git
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);
|
|
};
|
|
|