| var streamify = require('./streamify.js') | 
|   , defer     = require('./defer.js') | 
|   ; | 
|   | 
| // API | 
| module.exports = ReadableAsyncKit; | 
|   | 
| /** | 
|  * Base constructor for all streams | 
|  * used to hold properties/methods | 
|  */ | 
| function ReadableAsyncKit() | 
| { | 
|   ReadableAsyncKit.super_.apply(this, arguments); | 
|   | 
|   // list of active jobs | 
|   this.jobs = {}; | 
|   | 
|   // add stream methods | 
|   this.destroy = destroy; | 
|   this._start  = _start; | 
|   this._read   = _read; | 
| } | 
|   | 
| /** | 
|  * Destroys readable stream, | 
|  * by aborting outstanding jobs | 
|  * | 
|  * @returns {void} | 
|  */ | 
| function destroy() | 
| { | 
|   if (this.destroyed) | 
|   { | 
|     return; | 
|   } | 
|   | 
|   this.destroyed = true; | 
|   | 
|   if (typeof this.terminator == 'function') | 
|   { | 
|     this.terminator(); | 
|   } | 
| } | 
|   | 
| /** | 
|  * Starts provided jobs in async manner | 
|  * | 
|  * @private | 
|  */ | 
| function _start() | 
| { | 
|   // first argument – runner function | 
|   var runner = arguments[0] | 
|     // take away first argument | 
|     , args   = Array.prototype.slice.call(arguments, 1) | 
|       // second argument - input data | 
|     , input  = args[0] | 
|       // last argument - result callback | 
|     , endCb  = streamify.callback.call(this, args[args.length - 1]) | 
|     ; | 
|   | 
|   args[args.length - 1] = endCb; | 
|   // third argument - iterator | 
|   args[1] = streamify.iterator.call(this, args[1]); | 
|   | 
|   // allow time for proper setup | 
|   defer(function() | 
|   { | 
|     if (!this.destroyed) | 
|     { | 
|       this.terminator = runner.apply(null, args); | 
|     } | 
|     else | 
|     { | 
|       endCb(null, Array.isArray(input) ? [] : {}); | 
|     } | 
|   }.bind(this)); | 
| } | 
|   | 
|   | 
| /** | 
|  * Implement _read to comply with Readable streams | 
|  * Doesn't really make sense for flowing object mode | 
|  * | 
|  * @private | 
|  */ | 
| function _read() | 
| { | 
|   | 
| } |