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
Raw File
Tip revision: 4e743321440a426d44c6ce03c05339e73c4517a5 authored by Irakli Gozalishvili on 24 October 2012, 19:47:47 UTC
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
back to top