lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
36 lines • 1.32 kB
JavaScript
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