UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

52 lines 3.41 kB
/** * A Reference Map counts how many time you want to insert the same key. * And it tells you when you delete it as many times. */ export default class ReferenceMap { constructor() { this.map = new Map(); this.count = new Map(); } /** * If `key` is already stored in the map, * we add a reference to the mapped value and return it. * If not, we create the mapped value by calling `factory()`. */ add(key, factory) { var _a; const { map, count } = this; if (count.has(key)) { count.set(key, 1 + ((_a = count.get(key)) !== null && _a !== void 0 ? _a : 0)); const currentValue = map.get(key); if (!currentValue) throw new Error("[CountMap] Map should not be empty!"); return currentValue; } const newValue = factory(); map.set(key, newValue); count.set(key, 1); return newValue; } /** * Delete a reference to `key`. * If the last reference has been removed, * then return the mapped value, otherwise * return `undefined`. */ delete(key) { var _a; const { map, count } = this; if (!map.has(key)) return; const newCount = ((_a = count.get(key)) !== null && _a !== void 0 ? _a : 0) - 1; if (newCount > 0) { count.set(key, newCount); return; } const value = map.get(key); map.delete(key); count.delete(key); return value; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWZlcmVuY2UtbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sWUFBWTtJQUFqQztRQUNxQixRQUFHLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUE7UUFDbkMsVUFBSyxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFBO0lBMkN2RCxDQUFDO0lBekNHOzs7O09BSUc7SUFDSCxHQUFHLENBQUMsR0FBWSxFQUFFLE9BQXdCOztRQUN0QyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQTtRQUMzQixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFBLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG1DQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDekMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNqQyxJQUFJLENBQUMsWUFBWTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUE7WUFDekUsT0FBTyxZQUFZLENBQUE7UUFDdkIsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLE9BQU8sRUFBRSxDQUFBO1FBQzFCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3RCLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ2pCLE9BQU8sUUFBUSxDQUFBO0lBQ25CLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxHQUFZOztRQUNmLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFBO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU07UUFFekIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFBLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG1DQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUMxQyxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNmLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQ3hCLE9BQU07UUFDVixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUMxQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2YsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNqQixPQUFPLEtBQUssQ0FBQTtJQUNoQixDQUFDO0NBQ0oifQ==