<> <> <> <> <<>> DIRECTORY PropertyLists; Graphs0: CEDAR DEFINITIONS = BEGIN <<>> <> <> <> <<>> <> <> <> <<>> <> <> <<>> <> <> <> <<>> <> <<>> <> <> <<>> <<>> Graph: TYPE = REF GraphRec; GraphRec: TYPE = RECORD [--clients must never use NEW[GraphRec] graphInfo: REF _ NIL, graphPrivate: PRIVATE REF GraphPrivateRep _, props: PropertyLists.PropList _ NIL ]; GraphPrivateRep: TYPE; Create: PROC [graphInfo: REF _ NIL] RETURNS [graph: Graph]; <> <<>> Destroy: PROC [graph: Graph]; <> <> Node: TYPE = REF NodeRec; NodeList: TYPE = LIST OF Node; NodeRec: TYPE = RECORD[ nodeInfo: REF _ NIL, arcs: --READONLY-- ArcList _ NIL, --list and arc refs are readonly incl: PRIVATE BOOL _ FALSE, props: PropertyLists.PropList _ NIL ]; <> CreateNode: PROC [nodeInfo: REF _ NIL] RETURNS [node: Node]; <> IncludeNode: PROC [graph: Graph, node: Node]; <> <> RemoveNode: PROC [graph: Graph, node: Node] RETURNS [removedArcs: ArcList]; <> <> <> <> <> AddNewNode: PROC [graph: Graph, nodeInfo: REF _ NIL] RETURNS [node: Node]; <> Arc: TYPE = REF ArcRec; ArcList: TYPE = LIST OF Arc; ArcRec: TYPE = RECORD[ arcInfo: REF _ NIL, node1, node2: --READONLY-- Node _ NIL, --ref is readonly incl: PRIVATE BOOL _ FALSE, props: PropertyLists.PropList _ NIL ]; CreateArc: PROC [arcInfo: REF _ NIL] RETURNS [arc: Arc]; <> IncludeArc: PROC [graph: Graph, arc: Arc, node1, node2: Node]; <> <> RemoveArc: PROC [graph: Graph, arc: Arc]; <> <> <> AddNewArc: PROC [graph: Graph, arcInfo: REF _ NIL, node1, node2: Node] RETURNS [arc: Arc]; <> <<>> <<>> EnumNodeProc: TYPE = PROC[graph: Graph, node: Node, data: REF] RETURNS [quit: BOOL _ FALSE]; EnumNodes: PROC [graph: Graph, enumNode: EnumNodeProc, data: REF_NIL] RETURNS [quit: BOOL _ FALSE]; <> <> EnumArcProc: TYPE = PROC[graph: Graph, arc: Arc, data: REF] RETURNS [quit: BOOL _ FALSE]; EnumArcs: PROC [graph: Graph, enumArc: EnumArcProc, data: REF_NIL] RETURNS [quit: BOOL _ FALSE]; <> <> <<>> HasNode: PROC [graph: Graph, node: Node] RETURNS [BOOL]; <> <<>> HasArc: PROC [graph: Graph, arc: Arc] RETURNS [BOOL]; <> <<>> NodesInGraph: PROC [graph: Graph] RETURNS [INT]; <> ArcsInGraph: PROC [graph: Graph] RETURNS [INT]; <> RandomShuffle: PROC [graph: Graph, randomStream: REF_NIL]; <> <> <> <> <> Check: PROC [graph: Graph]; <> <> <> <> END.