From fb7cc16c3383af357f9749a366902816ccf828de Mon Sep 17 00:00:00 2001 From: David Sehnal <david.sehnal@gmail.com> Date: Tue, 6 Nov 2018 20:16:46 +0100 Subject: [PATCH] mol-state: transform index, behavior event helper --- src/mol-state/transformer.ts | 16 ++++++++++++++++ src/mol-util/rx-event-helper.ts | 1 + 2 files changed, 17 insertions(+) diff --git a/src/mol-state/transformer.ts b/src/mol-state/transformer.ts index 884c2e097..754e2728d 100644 --- a/src/mol-state/transformer.ts +++ b/src/mol-state/transformer.ts @@ -81,6 +81,17 @@ export namespace Transformer { } const registry = new Map<Id, Transformer<any, any>>(); + const fromTypeIndex: Map<StateObject.Type, Transformer[]> = new Map(); + + function _index(tr: Transformer) { + for (const t of tr.definition.from) { + if (fromTypeIndex.has(t.type)) { + fromTypeIndex.get(t.type)!.push(tr); + } else { + fromTypeIndex.set(t.type, [tr]); + } + } + } export function get(id: string): Transformer { const t = registry.get(id as Id); @@ -90,6 +101,10 @@ export namespace Transformer { return t; } + export function fromType(type: StateObject.Type): ReadonlyArray<Transformer> { + return fromTypeIndex.get(type) || []; + } + export function create<A extends StateObject, B extends StateObject, P>(namespace: string, definition: Definition<A, B, P>) { const { name } = definition; const id = `${namespace}.${name}` as Id; @@ -105,6 +120,7 @@ export namespace Transformer { definition }; registry.set(id, t); + _index(t); return t; } diff --git a/src/mol-util/rx-event-helper.ts b/src/mol-util/rx-event-helper.ts index 4ef9d5eef..586d2d3e0 100644 --- a/src/mol-util/rx-event-helper.ts +++ b/src/mol-util/rx-event-helper.ts @@ -19,6 +19,7 @@ namespace RxEventHelper { const helper = new _RxEventHelper(); const ret: RxEventHelper = (<T>() => helper.create<T>()) as RxEventHelper; ret.dispose = () => helper.dispose(); + ret.behavior = (v) => helper.behavior(v); return ret; } } -- GitLab