Source: utils/Signal.js

goog.provide('entitas.utils.Signal');
goog.require('entitas.utils.Bag');


/**
 *
 * @constructor
 * @param context
 * @param alloc
 */
entitas.utils.Signal = function(context, alloc) {
  if (alloc === void 0) { alloc = 16; }
  this._listeners = new entitas.utils.Bag();
  this._context = context;
  this._alloc = alloc;
  this.active = false;
}
/**
 * Dispatch event
 *
 * @param $0
 * @param $1
 * @param $2
 * @param $3
 * @param $4
 */
entitas.utils.Signal.prototype.dispatch = function ($0, $1, $2, $3, $4) {
  var listeners = this._listeners;
  var size = listeners.size();
  if (size <= 0)
    return; // bail early
  var context = this._context;
  for (var i = 0; i < size; i++) {
    listeners[i].call(context, $0, $1, $2, $3, $4);
  }
};
/**
 * Add event listener
 * @param listener
 */
entitas.utils.Signal.prototype.add = function (listener) {
  this._listeners.add(listener);
  this.active = true;
};
/**
 * Remove event listener
 * @param listener
 */
entitas.utils.Signal.prototype.remove = function (listener) {
  var listeners = this._listeners;
  listeners.remove(listener);
  this.active = listeners.size() > 0;
};
/**
 * Clear and reset to original alloc
 */
entitas.utils.Signal.prototype.clear = function () {
  this._listeners.clear();
  this.active = false;
};