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;
 |