UNPKG

molstar

Version:

A comprehensive macromolecular library.

51 lines (50 loc) 1.54 kB
/** * Copyright (c) 2018-2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ export function createReference(value, usageCount) { if (usageCount === void 0) { usageCount = 0; } return { value: value, usageCount: usageCount }; } export function createReferenceItem(ref) { return { free: function () { ref.usageCount -= 1; }, value: ref.value }; } export 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(); }, }; }