import DataUnit from "./DataUnit.js"; /** * Classe responsável por armazenar instâncias de DataUnit. */ export class DataUnitStorage { private static dataUnitMap: WeakMap<{ key: string }, DataUnit> = new WeakMap(); private static keyMap: Map = new Map(); /** * Retorna uma instância de DataUnit armazenada no DataUnitStorage. * @param {string} dataUnitName - O nome do DataUnit. * @returns {DataUnit | undefined} - A instância do DataUnit ou undefined caso não seja encontrada. */ static get(dataUnitName: string): DataUnit | undefined { const key = this.keyMap.get(dataUnitName); if (key) return this.dataUnitMap.get(key); } /** * Armazena uma instância de DataUnit no DataUnitStorage. * @param {DataUnit} dataUnit - A instância de DataUnit a ser armazenada. */ static put(dataUnit: DataUnit): void { const key = { key: dataUnit.name }; this.dataUnitMap.set(key, dataUnit); this.keyMap.set(dataUnit.name, key); } /** * Remove uma instância de DataUnit do DataUnitStorage. * @param {DataUnit | string} dataUnit - A instância de DataUnit ou o nome do DataUnit a ser removido. */ static remove(dataUnit: DataUnit | string): void { const key = typeof dataUnit === 'string' ? this.keyMap.get(dataUnit) : this.keyMap.get(dataUnit.name); const dataUnitKey = typeof dataUnit === 'string' ? dataUnit : dataUnit.name; if (key) { this.dataUnitMap.delete(key); this.keyMap.delete(dataUnitKey); } } }