https://github.com/Gozala/reducers
Revision 4e743321440a426d44c6ce03c05339e73c4517a5 authored by Irakli Gozalishvili on 24 October 2012, 19:47:47 UTC, committed by Irakli Gozalishvili on 24 October 2012, 19:47:47 UTC
1 parent c393dc3
Tip revision: 4e743321440a426d44c6ce03c05339e73c4517a5 authored by Irakli Gozalishvili on 24 October 2012, 19:47:47 UTC
Version 0.1.2
Version 0.1.2
Tip revision: 4e74332
queue.js
/* vim:set ts=2 sw=2 sts=2 expandtab */
/*jshint asi: true undef: true es5: true node: true browser: true devel: true
forin: true latedef: false globalstrict: true */
"use strict";
var convert = require("./convert")
var accumulate = require("./accumulate")
var concat = require("./concat")
var emit = require("./emit")
var queued = "queued@" + module.id
var output = "output@" + module.id
function isDrained(queue) {
return !queue[queued]
}
function queue(target) {
var value = convert(target, queue.accumulate)
emit.implement(value, queue.emit)
value[output] = target
value[queued] = []
return value
}
queue.emit = function(queue, value) {
if (isDrained(queue))
emit(queue[output], value)
else queue[queued].push(value)
return queue
}
queue.accumulate = function(queue, next, initial) {
accumulate(concat(queue[queued], queue[output]), next, initial)
queued = null
}
module.exports = queue
Computing file changes ...