File: /var/www/linde-ai/html/node_modules/websocket-extensions/lib/pipeline/pledge.js
'use strict';
var RingBuffer = require('./ring_buffer');
var Pledge = function() {
  this._complete  = false;
  this._callbacks = new RingBuffer(Pledge.QUEUE_SIZE);
};
Pledge.QUEUE_SIZE = 4;
Pledge.all = function(list) {
  var pledge  = new Pledge(),
      pending = list.length,
      n       = pending;
  if (pending === 0) pledge.done();
  while (n--) list[n].then(function() {
    pending -= 1;
    if (pending === 0) pledge.done();
  });
  return pledge;
};
Pledge.prototype.then = function(callback) {
  if (this._complete) callback();
  else this._callbacks.push(callback);
};
Pledge.prototype.done = function() {
  this._complete = true;
  var callbacks = this._callbacks, callback;
  while (callback = callbacks.shift()) callback();
};
module.exports = Pledge;