diff options
Diffstat (limited to 'utils/jsonds.ts')
-rw-r--r-- | utils/jsonds.ts | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/utils/jsonds.ts b/utils/jsonds.ts new file mode 100644 index 0000000..c717232 --- /dev/null +++ b/utils/jsonds.ts @@ -0,0 +1,66 @@ +export class JSONSet<T extends Object> { + private items: Set<string>; + + constructor() { + this.items = new Set<string>(); + } + + add(item: T): void { + const itemJson = JSON.stringify(item, Object.keys(item).sort()); + this.items.add(itemJson); + } + + has(item: T): boolean { + const itemJson = JSON.stringify(item, Object.keys(item).sort()); + return this.items.has(itemJson); + } + + delete(item: T): boolean { + const itemJson = JSON.stringify(item, Object.keys(item).sort()); + return this.items.delete(itemJson); + } + + clear(): void { + this.items.clear(); + } + + get size(): number { + return this.items.size; + } +} + +export class JSONHashMap<T extends Object> { + private map: Map<string, T>; + + constructor() { + this.map = new Map<string, T>(); + } + + set(key: T, value: T): void { + const keyJson = JSON.stringify(key, Object.keys(key).sort()); + this.map.set(keyJson, value); + } + + get(key: T): T | undefined { + const keyJson = JSON.stringify(key, Object.keys(key).sort()); + return this.map.get(keyJson); + } + + has(key: T): boolean { + const keyJson = JSON.stringify(key, Object.keys(key).sort()); + return this.map.has(keyJson); + } + + delete(key: T): boolean { + const keyJson = JSON.stringify(key, Object.keys(key).sort()); + return this.map.delete(keyJson); + } + + clear(): void { + this.map.clear(); + } + + get size(): number { + return this.map.size; + } +} |