Skip to content
Snippets Groups Projects
Select Git revision
  • ac58da12e15fe2f3028010ca72e98a97bfe63d15
  • master default protected
  • devel
  • hruska-feature-clients-api
  • malostik-#5066-deduplicate-idea-ids
  • warden-postgresql-port
  • hruska-feature-#6799-filter-keys
  • hruska-feature-5066-duplicateIdeaID
  • warden-client-3.0-beta3
  • warden-server-3.0-beta3
  • warden-client-2.2-final
  • warden-server-2.2-final
  • warden-client-3.0-beta2
  • warden-server-3.0-beta2
  • warden-client-2.2
  • warden-server-2.2-patch3
  • warden-client-3.0-beta1
  • warden-server-3.0-beta1
  • warden-server-2.2-patch1
  • warden-client-3.0-beta0
  • warden-server-3.0-beta0
  • warden-server-2.2
  • warden-server-2.1-patch1
  • warden-client-2.1
  • warden-server-2.1
  • warden-server-2.1-beta6
  • warden-server-2.1-beta5
  • warden-server-2.1-beta4
28 results

INSTALL

Blame
  • map.ts 1.25 KiB
    /**
     * 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
    //     }
    // }