mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-21 00:59:03 +01:00
For #88719 With this change, instead of passing custom editor edit json back and forth with the extension host, we keep the original edit objects on the extension host. This means that we can pass extensions back the exact same edit object they first hand to us. It also means that edits no longer need to be json serializable.
40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
export class Cache<T> {
|
|
|
|
private static readonly enableDebugLogging = false;
|
|
|
|
private readonly _data = new Map<number, readonly T[]>();
|
|
private _idPool = 1;
|
|
|
|
constructor(
|
|
private readonly id: string
|
|
) { }
|
|
|
|
add(item: readonly T[]): number {
|
|
const id = this._idPool++;
|
|
this._data.set(id, item);
|
|
this.logDebugInfo();
|
|
return id;
|
|
}
|
|
|
|
get(pid: number, id: number): T | undefined {
|
|
return this._data.has(pid) ? this._data.get(pid)![id] : undefined;
|
|
}
|
|
|
|
delete(id: number) {
|
|
this._data.delete(id);
|
|
this.logDebugInfo();
|
|
}
|
|
|
|
private logDebugInfo() {
|
|
if (!Cache.enableDebugLogging) {
|
|
return;
|
|
}
|
|
console.log(`${this.id} cache size — ${this._data.size}`);
|
|
}
|
|
}
|