This commit is contained in:
Tony Garnock-Jones 2021-02-22 21:38:04 +01:00
parent 4c0e2b448e
commit 5d49794d88
1 changed files with 5 additions and 13 deletions

18
main.ts
View File

@ -17,19 +17,11 @@ const Observe = Record.makeConstructor<Ref<Entity>>('Observe', ['label', 'observ
function makeDataspace(): Entity {
const handleMap: IdentityMap<Handle, Assertion> = new IdentityMap();
const assertions = new Bag<Ref<Entity>>();
const subscriptions: Dictionary<Dictionary<Dictionary<Handle>>> = new Dictionary();
const subscriptions: Dictionary<Map<Ref<Entity>, Dictionary<Handle>>> = new Dictionary();
function forEachSubscription(assertion: Assertion, f: (handleMap: Dictionary<Handle>, peer: Ref<Entity>) => void): void {
if (Record.isRecord(assertion)) {
const peerMap = subscriptions.get(assertion.label);
if (Dictionary.isDictionary(peerMap)) {
peerMap.forEach((handleMap, peer) => {
if (peer instanceof Ref) {
f(handleMap, peer);
}
});
}
}
if (!Record.isRecord(assertion)) return;
subscriptions.get(assertion.label)?.forEach(f);
}
return {
@ -42,7 +34,7 @@ function makeDataspace(): Entity {
const observer = Observe._.observer(assertion) as Ref<Entity>;
let peerMap = subscriptions.get(observedLabel);
if (peerMap === void 0) {
peerMap = new Dictionary();
peerMap = new Map();
subscriptions.set(observedLabel, peerMap);
}
const handleMap: Dictionary<Handle> = new Dictionary();
@ -78,7 +70,7 @@ function makeDataspace(): Entity {
});
if (Observe.isClassOf(assertion)) {
let peerMap = subscriptions.get(Observe._.label(assertion)!)!;
peerMap.delete(Observe._.observer(assertion)!);
peerMap.delete(Observe._.observer(assertion)! as Ref<Entity>);
if (peerMap.size === 0) subscriptions.delete(Observe._.label(assertion)!);
}
}