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](); +}