Path: blob/main/extensions/markdown-language-features/src/util/resourceMap.ts
3292 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import * as vscode from 'vscode';67type ResourceToKey = (uri: vscode.Uri) => string;89const defaultResourceToKey = (resource: vscode.Uri): string => resource.toString();1011export class ResourceMap<T> {1213private readonly _map = new Map<string, { readonly uri: vscode.Uri; readonly value: T }>();1415private readonly _toKey: ResourceToKey;1617constructor(toKey: ResourceToKey = defaultResourceToKey) {18this._toKey = toKey;19}2021public set(uri: vscode.Uri, value: T): this {22this._map.set(this._toKey(uri), { uri, value });23return this;24}2526public get(resource: vscode.Uri): T | undefined {27return this._map.get(this._toKey(resource))?.value;28}2930public has(resource: vscode.Uri): boolean {31return this._map.has(this._toKey(resource));32}3334public get size(): number {35return this._map.size;36}3738public clear(): void {39this._map.clear();40}4142public delete(resource: vscode.Uri): boolean {43return this._map.delete(this._toKey(resource));44}4546public *values(): IterableIterator<T> {47for (const entry of this._map.values()) {48yield entry.value;49}50}5152public *keys(): IterableIterator<vscode.Uri> {53for (const entry of this._map.values()) {54yield entry.uri;55}56}5758public *entries(): IterableIterator<[vscode.Uri, T]> {59for (const entry of this._map.values()) {60yield [entry.uri, entry.value];61}62}6364public [Symbol.iterator](): IterableIterator<[vscode.Uri, T]> {65return this.entries();66}67}686970