blob: 6dc1543b35453149347e6512d461601a5d366100 [file] [log] [blame]
'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);
};