UNPKG

lingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

36 lines 1.32 kB
import { forceGetInstance } from "@lincode/utils"; export default (factory, dispose) => { const paramStringObjectArrayMap = new Map(); const objectParamStringMap = new WeakMap(); const releasedObjects = new WeakSet(); let allObjects = []; const request = (params, paramString = JSON.stringify(params), context = undefined) => { const objectArray = forceGetInstance(paramStringObjectArrayMap, paramString, (Array)); if (objectArray.length) { const object = objectArray.pop(); releasedObjects.delete(object); return object; } const result = factory(params, context); objectParamStringMap.set(result, paramString); allObjects.push(result); return result; }; const release = (object) => { if (!object || releasedObjects.has(object)) return; releasedObjects.add(object); paramStringObjectArrayMap .get(objectParamStringMap.get(object)) .push(object); }; const clear = () => { if (dispose) for (const object of allObjects) dispose(object); paramStringObjectArrayMap.clear(); allObjects = []; }; return [request, release, clear]; }; //# sourceMappingURL=createObjectPool.js.map