From e47029c389bf6968110166416d4201cd9b598ec8 Mon Sep 17 00:00:00 2001 From: Matthieu Jolimaitre Date: Mon, 30 Dec 2024 14:59:54 +0100 Subject: [PATCH] add default maps --- src/lib.ts | 1 + src/lib/DefaultMap.ts | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 src/lib/DefaultMap.ts diff --git a/src/lib.ts b/src/lib.ts index 7585cdc..7c91ba1 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -26,3 +26,4 @@ export { Range, range } from "./lib/Range.ts"; export { Event } from "./lib/Event.ts"; export { AsyncPool } from "./lib/AsyncPool.ts"; export { ClassMap } from "./lib/ClassMap.ts"; +export { DefaultMap } from "./lib/DefaultMap.ts"; diff --git a/src/lib/DefaultMap.ts b/src/lib/DefaultMap.ts new file mode 100644 index 0000000..376a689 --- /dev/null +++ b/src/lib/DefaultMap.ts @@ -0,0 +1,18 @@ +export class DefaultMap { + inner = new Map(); + + constructor( + private def: () => V, + ) {} + + get(key: K) { + if (!this.inner.has(key)) this.inner.set(key, this.def()); + return this.inner.get(key)!; + } + + set(key: K, value: V) { + this.inner.set(key, value); + } + + [Symbol.iterator] = () => this.inner[Symbol.iterator](); +}