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.
		
		
		
		
		
			
		
			
				
					
					
						
							97 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							97 lines
						
					
					
						
							1.8 KiB
						
					
					
				| /**
 | |
|  * Obliterator Iterator Class
 | |
|  * ===========================
 | |
|  *
 | |
|  * Simple class representing the library's iterators.
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Iterator class.
 | |
|  *
 | |
|  * @constructor
 | |
|  * @param {function} next - Next function.
 | |
|  */
 | |
| function Iterator(next) {
 | |
|   if (typeof next !== 'function')
 | |
|     throw new Error('obliterator/iterator: expecting a function!');
 | |
| 
 | |
|   this.next = next;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * If symbols are supported, we add `next` to `Symbol.iterator`.
 | |
|  */
 | |
| if (typeof Symbol !== 'undefined')
 | |
|   Iterator.prototype[Symbol.iterator] = function () {
 | |
|     return this;
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Returning an iterator of the given values.
 | |
|  *
 | |
|  * @param  {any...} values - Values.
 | |
|  * @return {Iterator}
 | |
|  */
 | |
| Iterator.of = function () {
 | |
|   var args = arguments,
 | |
|     l = args.length,
 | |
|     i = 0;
 | |
| 
 | |
|   return new Iterator(function () {
 | |
|     if (i >= l) return {done: true};
 | |
| 
 | |
|     return {done: false, value: args[i++]};
 | |
|   });
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Returning an empty iterator.
 | |
|  *
 | |
|  * @return {Iterator}
 | |
|  */
 | |
| Iterator.empty = function () {
 | |
|   var iterator = new Iterator(function () {
 | |
|     return {done: true};
 | |
|   });
 | |
| 
 | |
|   return iterator;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Returning an iterator over the given indexed sequence.
 | |
|  *
 | |
|  * @param  {string|Array} sequence - Target sequence.
 | |
|  * @return {Iterator}
 | |
|  */
 | |
| Iterator.fromSequence = function (sequence) {
 | |
|   var i = 0,
 | |
|     l = sequence.length;
 | |
| 
 | |
|   return new Iterator(function () {
 | |
|     if (i >= l) return {done: true};
 | |
| 
 | |
|     return {done: false, value: sequence[i++]};
 | |
|   });
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Returning whether the given value is an iterator.
 | |
|  *
 | |
|  * @param  {any} value - Value.
 | |
|  * @return {boolean}
 | |
|  */
 | |
| Iterator.is = function (value) {
 | |
|   if (value instanceof Iterator) return true;
 | |
| 
 | |
|   return (
 | |
|     typeof value === 'object' &&
 | |
|     value !== null &&
 | |
|     typeof value.next === 'function'
 | |
|   );
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Exporting.
 | |
|  */
 | |
| module.exports = Iterator;
 |