mirror of
https://github.com/Terncode/pixel.horse.git
synced 2026-09-24 21:55:52 +02:00
31 lines
524 B
TypeScript
31 lines
524 B
TypeScript
export interface Pool<T> {
|
|
create(): T;
|
|
dispose(value: T): boolean;
|
|
}
|
|
|
|
export function createPool<T>(count: number, createNew: () => T, reset: (value: T) => void): Pool<T> {
|
|
const pool: T[] = [];
|
|
|
|
const create = () => {
|
|
const existing = pool.pop();
|
|
|
|
if (existing) {
|
|
reset(existing);
|
|
return existing;
|
|
} else {
|
|
return createNew();
|
|
}
|
|
};
|
|
|
|
const dispose = (value: T) => {
|
|
if (pool.length < count) {
|
|
pool.push(value);
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
return { create, dispose };
|
|
}
|