UNPKG

ropool

Version:

A simple and efficient object pool for JavaScript and TypeScript.

3 lines (2 loc) 1.41 kB
class t{constructor(t,e,s){this.id=t,this.obj=e,this.pool=s,this._isReleased=!0}get data(){return this.obj}free(){this._isReleased||(this.pool.release(this.id),this._isReleased=!0)}[Symbol.dispose](){this.free()}_onAcquire(){this._isReleased=!1}}class e{constructor(t,e=8){this.createObject=t,this.stack=new Uint16Array(0),this.objects=[],this.pointer=0,this.initialLength=e,this.resize()}resize(){const s=this.stack.length;let i=s>0?2*s:this.initialLength;if((i<=s||i>e.MAX_POOL_SIZE)&&(i=Math.min(e.MAX_POOL_SIZE,s+(this.initialLength>0?this.initialLength:8))),i<=s)return;const h=new Uint16Array(i);s>0&&h.set(this.stack);for(let e=s;e<i;e++){const s=this.createObject();h[e]=e,this.objects.push(new t(e,s,this))}this.stack=h}acquire(){if(this.pointer>=this.stack.length&&(this.resize(),this.pointer>=this.stack.length))throw new Error("ObjectPool: Pool exhausted and resize failed to provide new objects.");const t=this.stack[this.pointer];this.pointer++;const e=this.objects[t];return e._onAcquire(),e}release(t){this.pointer>0?this.stack[--this.pointer]=t:console.warn(`ObjectPool: release(id: ${t}) called when pointer is 0. Possible pool imbalance.`)}releaseAll(){for(let t=0;t<this.objects.length;t++){const e=this.objects[t];e&&!e._isReleased&&(e._isReleased=!0),this.stack[t]=t}this.pointer=0}}e.MAX_POOL_SIZE=65536;export{t as ObjectHandle,e as ObjectPool}; //# sourceMappingURL=index.mjs.map