UNPKG

molstar

Version:

A comprehensive macromolecular library.

74 lines (73 loc) 3.32 kB
/** * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ import { OrderedSet } from 'immutable'; import { StateTransform } from '../transform'; import { TransientTree } from './transient'; export { StateTree }; /** * An immutable tree where each node requires a unique reference. * Represented as an immutable map. */ interface StateTree { readonly root: StateTransform; readonly transforms: StateTree.Transforms; readonly children: StateTree.Children; /** Refs to all nodes that depend on the given key */ readonly dependencies: StateTree.Dependencies; asTransient(): TransientTree; } declare namespace StateTree { type Ref = StateTransform.Ref; export interface ChildSet { readonly size: number; readonly values: OrderedSet<Ref>['values']; has(ref: Ref): boolean; readonly forEach: OrderedSet<Ref>['forEach']; readonly map: OrderedSet<Ref>['map']; toArray(): Ref[]; first(): Ref; } interface _Map<T> { readonly size: number; has(ref: Ref): boolean; get(ref: Ref): T; } export interface Transforms extends _Map<StateTransform> { } export interface Children extends _Map<ChildSet> { } export interface Dependencies extends _Map<ChildSet> { } /** * Create an instance of an immutable tree. */ export function createEmpty(customRoot?: StateTransform): StateTree; export function create(nodes: Transforms, children: Children, dependencies: Dependencies): StateTree; /** * Visit all nodes in a subtree in "post order", meaning leafs get visited first. */ export function doPostOrder<S>(tree: StateTree, root: StateTransform, state: S, f: (node: StateTransform, tree: StateTree, state: S) => boolean | undefined | void): S; /** * Visit all nodes in a subtree in "pre order", meaning leafs get visited last. * If the visitor function returns false, the visiting for that branch is interrupted. */ export function doPreOrder<S>(tree: StateTree, root: StateTransform, state: S, f: (node: StateTransform, tree: StateTree, state: S) => boolean | undefined | void): S; /** * Get all nodes in a subtree, leafs come first. */ export function subtreePostOrder(tree: StateTree, root: StateTransform): StateTransform<import("../transformer").StateTransformer<import("../object").StateObject<any, import("../object").StateObject.Type<any>>, import("../object").StateObject<any, import("../object").StateObject.Type<any>>, any>>[]; export interface Serialized { /** Transforms serialized in pre-order */ transforms: StateTransform.Serialized[]; } export function toJSON(tree: StateTree): Serialized; export function fromJSON(data: Serialized): StateTree; export function dump(tree: StateTree): void; /** Check if the subtree with the given root has the provided ref */ export function subtreeHasRef(tree: StateTree, root: StateTransform.Ref, ref: StateTransform.Ref): boolean; export function getDecoratorRoot(tree: StateTree, ref: StateTransform.Ref): StateTransform.Ref; export {}; }