57 lines
1.4 KiB
TypeScript
57 lines
1.4 KiB
TypeScript
module es {
|
||
/**
|
||
* 可以用于列表池的简单类
|
||
*/
|
||
export class ListPool {
|
||
private static readonly _objectQueue = [];
|
||
|
||
/**
|
||
* 预热缓存,使用最大的cacheCount对象填充缓存
|
||
* @param cacheCount
|
||
*/
|
||
public static warmCache(cacheCount: number) {
|
||
cacheCount -= this._objectQueue.length;
|
||
if (cacheCount > 0) {
|
||
for (let i = 0; i < cacheCount; i++) {
|
||
this._objectQueue.unshift([]);
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 将缓存修剪为cacheCount项目
|
||
* @param cacheCount
|
||
*/
|
||
public static trimCache(cacheCount) {
|
||
while (cacheCount > this._objectQueue.length)
|
||
this._objectQueue.shift();
|
||
}
|
||
|
||
/**
|
||
* 清除缓存
|
||
*/
|
||
public static clearCache() {
|
||
this._objectQueue.length = 0;
|
||
}
|
||
|
||
/**
|
||
* 如果可以的话,从堆栈中弹出一个项
|
||
*/
|
||
public static obtain<T>(): T[] {
|
||
if (this._objectQueue.length > 0)
|
||
return this._objectQueue.shift();
|
||
|
||
return [];
|
||
}
|
||
|
||
/**
|
||
* 将项推回堆栈
|
||
* @param obj
|
||
*/
|
||
public static free<T>(obj: Array<T>) {
|
||
this._objectQueue.unshift(obj);
|
||
obj.length = 0;
|
||
}
|
||
}
|
||
}
|