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;
};