japji/resources/public/js/cljs-runtime/goog.structs.prioritypool.js
2025-09-01 12:49:14 +01:00

61 lines
2.3 KiB
JavaScript

goog.provide("goog.structs.PriorityPool");
goog.require("goog.structs.Pool");
goog.require("goog.structs.PriorityQueue");
goog.structs.PriorityPool = function(opt_minCount, opt_maxCount) {
this.delayTimeout_ = undefined;
this.requestQueue_ = new goog.structs.PriorityQueue();
goog.structs.Pool.call(this, opt_minCount, opt_maxCount);
};
goog.inherits(goog.structs.PriorityPool, goog.structs.Pool);
goog.structs.PriorityPool.DEFAULT_PRIORITY_ = 100;
goog.structs.PriorityPool.prototype.setDelay = function(delay) {
goog.structs.PriorityPool.base(this, "setDelay", delay);
if (this.lastAccess == null) {
return;
}
goog.global.clearTimeout(this.delayTimeout_);
this.delayTimeout_ = goog.global.setTimeout(goog.bind(this.handleQueueRequests_, this), this.delay + this.lastAccess - Date.now());
this.handleQueueRequests_();
};
goog.structs.PriorityPool.prototype.getObject = function(opt_callback, opt_priority) {
if (!opt_callback) {
var result = goog.structs.PriorityPool.base(this, "getObject");
if (result && this.delay) {
this.delayTimeout_ = goog.global.setTimeout(goog.bind(this.handleQueueRequests_, this), this.delay);
}
return result;
}
var priority = opt_priority !== undefined ? opt_priority : goog.structs.PriorityPool.DEFAULT_PRIORITY_;
this.requestQueue_.enqueue(priority, opt_callback);
this.handleQueueRequests_();
return undefined;
};
goog.structs.PriorityPool.prototype.handleQueueRequests_ = function() {
var requestQueue = this.requestQueue_;
for (; requestQueue.getCount() > 0;) {
var obj = this.getObject();
if (!obj) {
return;
} else {
var requestCallback = requestQueue.dequeue();
requestCallback.apply(this, [obj]);
}
}
};
goog.structs.PriorityPool.prototype.addFreeObject = function(obj) {
goog.structs.PriorityPool.superClass_.addFreeObject.call(this, obj);
this.handleQueueRequests_();
};
goog.structs.PriorityPool.prototype.adjustForMinMax = function() {
goog.structs.PriorityPool.superClass_.adjustForMinMax.call(this);
this.handleQueueRequests_();
};
goog.structs.PriorityPool.prototype.disposeInternal = function() {
goog.structs.PriorityPool.superClass_.disposeInternal.call(this);
goog.global.clearTimeout(this.delayTimeout_);
this.requestQueue_.clear();
this.requestQueue_ = null;
};
//# sourceMappingURL=goog.structs.prioritypool.js.map