UNPKG

molstar

Version:

A comprehensive macromolecular library.

57 lines 1.89 kB
"use strict"; /** * 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