61 lines
2.3 KiB
JavaScript
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
|