Convert RefSetCache
to a proper class and to use a Map
internally
Using a `Map` instead of an `Object` provides some advantages such as cheaper ways to get the size of the cache, to find out if an entry is contained in the cache and to iterate over the cache. Moreover, we can clear and re-use the same `Map` object now instead of creating a new one.
This commit is contained in:
parent
29adbb7cd7
commit
b19a1796ac
@ -239,46 +239,41 @@ class RefSet {
|
||||
}
|
||||
}
|
||||
|
||||
var RefSetCache = (function RefSetCacheClosure() {
|
||||
// eslint-disable-next-line no-shadow
|
||||
function RefSetCache() {
|
||||
this.dict = Object.create(null);
|
||||
class RefSetCache {
|
||||
constructor() {
|
||||
this._map = new Map();
|
||||
}
|
||||
|
||||
RefSetCache.prototype = {
|
||||
get size() {
|
||||
return Object.keys(this.dict).length;
|
||||
},
|
||||
|
||||
get: function RefSetCache_get(ref) {
|
||||
return this.dict[ref.toString()];
|
||||
},
|
||||
|
||||
has: function RefSetCache_has(ref) {
|
||||
return ref.toString() in this.dict;
|
||||
},
|
||||
|
||||
put: function RefSetCache_put(ref, obj) {
|
||||
this.dict[ref.toString()] = obj;
|
||||
},
|
||||
|
||||
putAlias: function RefSetCache_putAlias(ref, aliasRef) {
|
||||
this.dict[ref.toString()] = this.get(aliasRef);
|
||||
},
|
||||
|
||||
forEach: function RefSetCache_forEach(callback) {
|
||||
for (const i in this.dict) {
|
||||
callback(this.dict[i]);
|
||||
return this._map.size;
|
||||
}
|
||||
},
|
||||
|
||||
clear: function RefSetCache_clear() {
|
||||
this.dict = Object.create(null);
|
||||
},
|
||||
};
|
||||
get(ref) {
|
||||
return this._map.get(ref.toString());
|
||||
}
|
||||
|
||||
return RefSetCache;
|
||||
})();
|
||||
has(ref) {
|
||||
return this._map.has(ref.toString());
|
||||
}
|
||||
|
||||
put(ref, obj) {
|
||||
this._map.set(ref.toString(), obj);
|
||||
}
|
||||
|
||||
putAlias(ref, aliasRef) {
|
||||
this._map.set(ref.toString(), this.get(aliasRef));
|
||||
}
|
||||
|
||||
forEach(callback) {
|
||||
for (const value of this._map.values()) {
|
||||
callback(value);
|
||||
}
|
||||
}
|
||||
|
||||
clear() {
|
||||
this._map.clear();
|
||||
}
|
||||
}
|
||||
|
||||
function isEOF(v) {
|
||||
return v === EOF;
|
||||
|
Loading…
x
Reference in New Issue
Block a user