import * as Immutable from "immutable"; import { Primitive, NodeSlotDescriptor } from './base'; export interface IImmutableAdjacency { from(fromId: IdT): Immutable.Set; to(toId: IdT): Immutable.Set; addEdge(fromId: IdT, toId: IdT): IImmutableAdjacency; removeEdge(fromId: IdT, toId: IdT): IImmutableAdjacency; edges(): Immutable.Seq.Indexed<[IdT, IdT]>; hasEdge(fromId: IdT, toId: IdT): boolean; } export declare class ImmutableAdjacency implements IImmutableAdjacency { private readonly _fromAdj; private readonly _toAdj; private readonly _defaultIdSet; private constructor(); static fromTopology(edges: Iterable<[IdT, IdT]>): IImmutableAdjacency; from(fromId: IdT): Immutable.Set; to(toId: IdT): Immutable.Set; addEdge(fromId: IdT, toId: IdT): IImmutableAdjacency; removeEdge(fromId: IdT, toId: IdT): IImmutableAdjacency; edges(): Immutable.Seq.Indexed<[IdT, IdT]>; hasEdge(fromId: IdT, toId: IdT): boolean; } interface INodeSlotAsObject { readonly nodeId: IdT; readonly slotId: IdT; } interface INodeSlotAsArray { [Symbol.iterator](): Iterator; } export declare class NodeSlot implements INodeSlotAsObject, INodeSlotAsArray, Immutable.ValueObject { [Symbol.iterator](): Iterator; readonly nodeId: IdT; readonly slotId: IdT; private readonly _hashCode; constructor(nodeId: IdT, slotId: IdT); equals(other: any): boolean; hashCode(): number; } export declare function nodeSlot(nodeId: IdT, slotId: IdT): NodeSlot; export declare type NodeSlotRecord = Immutable.Record>; export interface IImmutableSlotGraph { node(nodeId: IdT): DataT; nodes(): Immutable.Seq.Keyed; topologicalSort(): Array; from(nodeId: IdT): Immutable.Set; to(nodeId: IdT): Immutable.Set; updateNode(nodeId: IdT, data: DataT): IImmutableSlotGraph; removeNode(nodeId: IdT): IImmutableSlotGraph; removeEdge(fromId: IdT, toId: IdT): IImmutableSlotGraph; readonly slotAdj: IImmutableAdjacency>; updateSlotAdj(updater: (adj: IImmutableAdjacency>) => IImmutableAdjacency>): IImmutableSlotGraph; } export declare class SlotGraph implements IImmutableSlotGraph { private readonly _nodesMap; private readonly _slotsDescriptor; private constructor(); readonly slotAdj: IImmutableAdjacency>; static fromTopology(nodes: Iterable<[IdT, DataT]>, slotEdges: Iterable<[NodeSlot, NodeSlot]>, slotsDescriptor: NodeSlotDescriptor): SlotGraph; node(nodeId: IdT): DataT; nodes(): Immutable.Seq.Keyed; topologicalSort(): Array; from(nodeId: IdT): Immutable.Set; to(nodeId: IdT): Immutable.Set; updateNode(nodeId: IdT, data: DataT): IImmutableSlotGraph; removeNode(nodeId: IdT): IImmutableSlotGraph; removeEdge(fromId: IdT, toId: IdT): IImmutableSlotGraph; updateSlotAdj(updater: (adj: IImmutableAdjacency>) => IImmutableAdjacency>): IImmutableSlotGraph; } export {};