summaryrefslogtreecommitdiff
path: root/utils/jsonds.ts
diff options
context:
space:
mode:
Diffstat (limited to 'utils/jsonds.ts')
-rw-r--r--utils/jsonds.ts66
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;
+ }
+}