12345678910111213141516171819202122232425262728293031323334353637 |
- /**
- * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- */
- export interface DefaultMap<K, V> extends Map<K, V> {
- /** Return the value for `key` when available or the default value otherwise. */
- getDefault: (key: K) => V
- }
- /** A `Map` instance with a `getDefault` method added. */
- export function DefaultMap<K, V>(valueCtor: () => V) {
- const map = new Map<K, V>() as DefaultMap<K, V>;
- map.getDefault = (key: K) => {
- if (map.has(key)) return map.get(key)!;
- const value = valueCtor();
- map.set(key, value);
- return value;
- };
- return map;
- }
- // TODO currently not working, see https://github.com/Microsoft/TypeScript/issues/10853
- // /** A `Map` with a `getDefault` method added. */
- // export class DefaultMap<K, V> extends Map<K, V> {
- // constructor(private valueCtor: () => V, entries?: ReadonlyArray<[K, V]>) {
- // super(entries)
- // }
- // /** Return the value for `key` when available or the default value otherwise. */
- // getDefault(key: K) {
- // if (this.has(key)) return this.get(key)!
- // const value = this.valueCtor()
- // this.set(key, value)
- // return value
- // }
- // }
|