molstar
Version:
A comprehensive macromolecular library.
57 lines • 1.89 kB
JavaScript
/**
* Copyright (c) 2018-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createReferenceCache = exports.createReferenceItem = exports.createReference = void 0;
function createReference(value, usageCount) {
if (usageCount === void 0) { usageCount = 0; }
return { value: value, usageCount: usageCount };
}
exports.createReference = createReference;
function createReferenceItem(ref) {
return {
free: function () {
ref.usageCount -= 1;
},
value: ref.value
};
}
exports.createReferenceItem = createReferenceItem;
function createReferenceCache(hashFn, ctor, deleteFn) {
var map = new Map();
return {
get: function (props) {
var id = hashFn(props);
var ref = map.get(id);
if (!ref) {
ref = createReference(ctor(props));
map.set(id, ref);
}
ref.usageCount += 1;
return createReferenceItem(ref);
},
clear: function () {
map.forEach(function (ref, id) {
if (ref.usageCount <= 0) {
if (ref.usageCount < 0) {
console.warn('Reference usageCount below zero.');
}
deleteFn(ref.value);
map.delete(id);
}
});
},
get count() {
return map.size;
},
dispose: function () {
map.forEach(function (ref) { return deleteFn(ref.value); });
map.clear();
},
};
}
exports.createReferenceCache = createReferenceCache;
//# sourceMappingURL=reference-cache.js.map
;