• dilute.js

  • ¶
    var cadence = require('cadence'),
        assert = require('assert')
    
    function Dilute (iterator, filter) {
        this._iterator = iterator
        this._filter = filter
        this._done = false
    }
    
    Dilute.prototype.get = function () {
        var item
        while ((item = this._iterator.get()) != null) {
            switch (this._filter(item)) {
            case -1:
                break
            case 0:
                return item
            case 1:
                this._done = true
                return null
            default:
                throw new Error('invalid return from filter')
            }
        }
        return null
    }
    
    Dilute.prototype.next = function (callback) {
        if (this._done) {
            callback(null, null)
        }
        this._iterator.next(callback)
    }
    
    Dilute.prototype.unlock = function (callback) {
        assert.ok(callback, 'unlock now requires a callback')
        this._iterator.unlock(callback)
    }
    
    module.exports = function (iterator, filter) {
        return new Dilute(iterator, filter)
    }