amis-rpc-design/node_modules/monaco-editor/esm/vs/base/common/cache.js
2023-10-07 19:42:30 +08:00

41 lines
990 B
JavaScript

/**
* Uses a LRU cache to make a given parametrized function cached.
* Caches just the last value.
* The key must be JSON serializable.
*/
export class LRUCachedFunction {
constructor(fn) {
this.fn = fn;
this.lastCache = undefined;
this.lastArgKey = undefined;
}
get(arg) {
const key = JSON.stringify(arg);
if (this.lastArgKey !== key) {
this.lastArgKey = key;
this.lastCache = this.fn(arg);
}
return this.lastCache;
}
}
/**
* Uses an unbounded cache (referential equality) to memoize the results of the given function.
*/
export class CachedFunction {
get cachedValues() {
return this._map;
}
constructor(fn) {
this.fn = fn;
this._map = new Map();
}
get(arg) {
if (this._map.has(arg)) {
return this._map.get(arg);
}
const value = this.fn(arg);
this._map.set(arg, value);
return value;
}
}