12345678910111213141516171819202122232425262728293031323334353637383940 |
- '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);
- };
|