Graphs.Mesa
Last Edited by: Spreitzer, June 6, 1985 4:35:25 pm PDT
DIRECTORY Asserting, Rope;
Graphs: CEDAR DEFINITIONS =
BEGIN
ROPE: TYPE = Rope.ROPE;
Vertex: TYPE = REF VertexRep;
VertexRep: TYPE = RECORD [
rep: REF ANY,
type: VertexType,
other: Asserting.Assertions ← NIL
];
VertexType: TYPE = REF VertexTypeRep;
VertexTypeRep: TYPE = RECORD [
data: REF ANYNIL,
Expand: ExpandProc,
GetLabel: GetLabelProc ← NIL,
LabelEdges: LabelEdgesProc ← NIL,
CrossLabeledEdge: CrossLabeledEdgeProc ← NIL,
GetIndexedNeighbor: GetIndexedNeighborProc ← NIL,
GetNeighborCount: NeighborCountProc ← NIL,
other: Asserting.Assertions ← NIL
];
Label: TYPE = ROPENIL;
unlabeled: Label = NIL;
ExpandProc: TYPE = PROC [vertex: Vertex, consume: EdgeConsumer];
EdgeConsumer: TYPE = RECORD [
proc: EdgeConsumerProc,
data: REF ANYNIL];
EdgeConsumerProc: TYPE = PROC [edge: Edge, data: REF ANY];
Edge: TYPE = RECORD [label: Label, otherSide: Vertex];
GetLabelProc: TYPE = PROC [vertex: Vertex] RETURNS [label: Label];
LabelEdgesProc: TYPE = PROC [vertex: Vertex, consume: LabelConsumer];
LabelConsumer: TYPE = RECORD [
proc: LabelConsumerProc,
data: REF ANYNIL];
LabelConsumerProc: TYPE = PROC [edgeLabel: Label, data: REF ANY];
CrossLabeledEdgeProc: TYPE = PROC [vertex: Vertex, edgeLabel: Label] RETURNS [neighbor: Vertex];
GetIndexedNeighborProc: TYPE = PROC [vertex: Vertex, index: INT--origin 1--] RETURNS [neighbor: Vertex];
NeighborCountProc: TYPE = PROC [vertex: Vertex] RETURNS [neighborCount: INT];
NewVertexType: PROC [VertexTypeRep] RETURNS [vt: VertexType];
Provides default implementations of procedures that can be derived from given procs.
Proc: TYPE = PROC ANY RETURNS ANY;
AddOtherProc: PROC [vt: VertexType, key: ATOM, proc: Proc];
GetOtherProc: PROC [vt: VertexType, key: ATOM] RETURNS [proc: Proc];
END.