graph_state.d.ts 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import { Delta } from "./delta";
  2. import { NodeCreation, NodeDeletion, EdgeUpdate, ExistingEdge } from "./delta";
  3. import { DeltaRegistry } from "./delta_registry";
  4. import { PrimitiveValue } from "./types";
  5. export interface GraphStateListener {
  6. createNode(ns: NodeState): void;
  7. createValue(vs: ValueState): void;
  8. deleteNode(id: PrimitiveValue): void;
  9. deleteValue(value: PrimitiveValue): void;
  10. createLinkToNode(sourceId: PrimitiveValue, label: string, targetId: PrimitiveValue): void;
  11. createLinkToValue(sourceId: PrimitiveValue, label: string, targetValue: PrimitiveValue): void;
  12. deleteLink(sourceId: PrimitiveValue, label: string): void;
  13. }
  14. export declare class FanOutListener implements GraphStateListener {
  15. readonly listeners: GraphStateListener[];
  16. constructor(listeners: GraphStateListener[]);
  17. createNode(ns: NodeState): void;
  18. createValue(vs: ValueState): void;
  19. deleteNode(id: PrimitiveValue): void;
  20. deleteValue(value: PrimitiveValue): void;
  21. createLinkToNode(sourceId: PrimitiveValue, label: string, targetId: PrimitiveValue): void;
  22. createLinkToValue(sourceId: PrimitiveValue, label: string, targetValue: PrimitiveValue): void;
  23. deleteLink(sourceId: PrimitiveValue, label: string): void;
  24. }
  25. export declare class DummyListener implements GraphStateListener {
  26. createNode(ns: NodeState): void;
  27. createValue(vs: ValueState): void;
  28. deleteNode(id: PrimitiveValue): void;
  29. deleteValue(value: PrimitiveValue): void;
  30. createLinkToNode(sourceId: PrimitiveValue, label: string, targetId: PrimitiveValue): void;
  31. createLinkToValue(sourceId: PrimitiveValue, label: string, targetValue: PrimitiveValue): void;
  32. deleteLink(sourceId: PrimitiveValue, label: string): void;
  33. }
  34. declare abstract class Common {
  35. readonly currentlyIncoming: Array<[string, EdgeUpdate, NodeState]>;
  36. readonly previouslyIncoming: Set<EdgeUpdate>;
  37. addIncoming(label: string, delta: EdgeUpdate, srcState: NodeState, listener: GraphStateListener): void;
  38. noLongerIncoming(overwritten: EdgeUpdate, overwriter: EdgeUpdate, listener: GraphStateListener): void;
  39. unAddIncoming(delta: EdgeUpdate, listener: GraphStateListener): void;
  40. incomingAgain(label: string, unOverwritten: EdgeUpdate, srcState: NodeState, unOverwriter: EdgeUpdate, listener: GraphStateListener): void;
  41. getIncomingEdges(): [string, INodeState][];
  42. abstract isNode(uuid: PrimitiveValue): boolean;
  43. abstract isValue(value: PrimitiveValue): boolean;
  44. abstract asTarget(): NodeCreation | PrimitiveValue;
  45. abstract createLinkTo(sourceId: PrimitiveValue, label: string, listener: GraphStateListener): void;
  46. abstract getDeltaForSetEdge(registry: DeltaRegistry, label: string, target: NodeCreation | PrimitiveValue, reads?: ExistingEdge[]): EdgeUpdate;
  47. abstract getDeltasForDelete(registry: DeltaRegistry): (EdgeUpdate | NodeDeletion)[];
  48. getReads(label: string): EdgeUpdate[];
  49. getIncomingEdgeDependenciesForDelete(registry: DeltaRegistry): [EdgeUpdate[], EdgeUpdate[]];
  50. }
  51. interface ICommon {
  52. getIncomingEdges(): [string, INodeState][];
  53. getDeltaForSetEdge(registry: DeltaRegistry, label: string, target: NodeCreation | PrimitiveValue, reads?: ExistingEdge[]): EdgeUpdate;
  54. getDeltasForDelete(registry: DeltaRegistry): (EdgeUpdate | NodeDeletion)[];
  55. asTarget(): NodeCreation | PrimitiveValue;
  56. isNode(uuid: PrimitiveValue): boolean;
  57. isValue(value: PrimitiveValue): boolean;
  58. }
  59. export interface IValueState extends ICommon {
  60. readonly type: "value";
  61. readonly value: PrimitiveValue;
  62. }
  63. export interface INodeState extends ICommon {
  64. readonly type: "node";
  65. readonly outgoingDeltas: ReadonlyMap<string, EdgeUpdate>;
  66. readonly outgoing: ReadonlyMap<string, IValueState | INodeState>;
  67. readonly creation: NodeCreation;
  68. readonly isDeleted: boolean;
  69. }
  70. declare class NodeState extends Common implements INodeState {
  71. readonly type = "node";
  72. readonly creation: NodeCreation;
  73. readonly outgoingDeltas: Map<string, EdgeUpdate>;
  74. readonly outgoingReads: Map<string, EdgeUpdate[]>;
  75. readonly outgoing: Map<string, IValueState | INodeState>;
  76. isDeleted: boolean;
  77. constructor(creation: NodeCreation);
  78. isNode(uuid: PrimitiveValue): boolean;
  79. isValue(value: PrimitiveValue): boolean;
  80. asTarget(): NodeCreation;
  81. createLinkTo(sourceId: PrimitiveValue, label: string, listener: GraphStateListener): void;
  82. getReads(label: string): EdgeUpdate[];
  83. getDeltaForSetEdge(registry: DeltaRegistry, label: string, target: NodeCreation | PrimitiveValue, reads?: readonly ExistingEdge[]): EdgeUpdate;
  84. getDeltasForDelete(registry: DeltaRegistry): (EdgeUpdate | NodeDeletion)[];
  85. }
  86. declare class ValueState extends Common implements IValueState {
  87. readonly type = "value";
  88. shown: boolean;
  89. readonly value: PrimitiveValue;
  90. constructor(value: PrimitiveValue);
  91. isNode(uuid: PrimitiveValue): boolean;
  92. isValue(value: PrimitiveValue): boolean;
  93. asTarget(): PrimitiveValue;
  94. createLinkTo(sourceId: PrimitiveValue, label: string, listener: GraphStateListener): void;
  95. addIncoming(label: string, delta: EdgeUpdate, srcState: NodeState, listener: GraphStateListener): void;
  96. noLongerIncoming(overwritten: EdgeUpdate, overwriter: EdgeUpdate, listener: GraphStateListener): void;
  97. unAddIncoming(delta: EdgeUpdate, listener: GraphStateListener): void;
  98. incomingAgain(label: string, unOverwritten: EdgeUpdate, srcState: NodeState, unOverwriter: EdgeUpdate, listener: GraphStateListener): void;
  99. private _showOrHide;
  100. getDeltaForSetEdge(registry: DeltaRegistry, label: string, target: NodeCreation | PrimitiveValue, reads?: ExistingEdge[]): EdgeUpdate;
  101. getDeltasForDelete(registry: DeltaRegistry): (EdgeUpdate | NodeDeletion)[];
  102. }
  103. export declare class GraphState {
  104. readonly nodes: Map<PrimitiveValue, NodeState>;
  105. readonly values: Map<PrimitiveValue, ValueState>;
  106. private deltasSinceCheckpoint;
  107. readonly deltas: Set<Delta>;
  108. pushState(): void;
  109. popState(): Array<Delta>;
  110. exec(delta: Delta, listener?: GraphStateListener): void;
  111. unexec(delta: Delta, listener?: GraphStateListener): void;
  112. private _getEdgeTargetState;
  113. private getValueState;
  114. private execNodeCreation;
  115. private unexecNodeCreation;
  116. private execNodeDeletion;
  117. private unexecNodeDeletion;
  118. private execEdgeUpdate;
  119. private unexecEdgeUpdate;
  120. }
  121. export {};