<> <> <> DIRECTORY PETypes; PETrajectoryOps: CEDAR DEFINITIONS = BEGIN OPEN PETypes; <> <<>> VertexProc: TYPE = PROCEDURE [v: VertexNode]; SegmentProc: TYPE = PROCEDURE [s: SegmentNode]; TrajectoryProc: TYPE = PROCEDURE [t: TrajectoryNode]; ForAllVertices: PROCEDURE [vertexList: VertexList, proc: VertexProc]; <> <<>> ForAllSegments: PROCEDURE [segmentList: SegmentList, proc: SegmentProc]; <> ForAllTrajectories: PROCEDURE [trajectoryList: TrajectoryList, proc: TrajectoryProc]; <> <<>> <> IsAKnot: PROCEDURE [vertexNode: VertexNode] RETURNS [isAKnot: BOOLEAN]; <> IsAControlPoint: PROCEDURE [vertexNode: VertexNode] RETURNS [isAControlPoint: BOOLEAN]; <> IsFirstVertex: PROCEDURE [vertexNode: VertexNode] RETURNS [isFirst: BOOLEAN]; <> IsLastVertex: PROCEDURE [vertexNode: VertexNode] RETURNS [isLast: BOOLEAN]; <> InsertVertex: PROCEDURE [vertexList: VertexList, vertex: Vertex, node: VertexNode] RETURNS [newVertexList: VertexList, newNode: VertexNode]; <> RemoveVertex: PROCEDURE [vertexList: VertexList, vertex: VertexNode] RETURNS [newVertexList: VertexList, prevVertex: VertexNode]; <> LastVertexNode: PROCEDURE [list: VertexList] RETURNS [vertexNode: VertexNode]; <> PrecedingVertex: PROCEDURE [vertex: VertexNode, segment: SegmentNode] RETURNS [pVertex: VertexNode, pSegment: SegmentNode]; <> FollowingVertex: PROCEDURE [vertex: VertexNode, segment: SegmentNode] RETURNS [fVertex: VertexNode, fSegment: SegmentNode]; <> FreeVertexList: PROCEDURE [vertexList: VertexList]; <> VertexListLength: PROCEDURE [list: VertexList] RETURNS [length: CARDINAL]; VertexListAppend: PROCEDURE [list1: VertexList, list2: VertexList _ NIL] RETURNS [list: VertexList]; VertexListNthElement: PROCEDURE [list: VertexList, n: INTEGER] RETURNS [vertex: Vertex]; <> <> <<>> IsFirstSegment: PROCEDURE [segmentNode: SegmentNode] RETURNS [isFirst: BOOLEAN]; <> IsLastSegment: PROCEDURE [segmentNode: SegmentNode] RETURNS [isLast: BOOLEAN]; <> InsertSegment: PROCEDURE [segmentList: SegmentList, segment: Segment, node: SegmentNode] RETURNS [newSegmentList: SegmentList, newNode: SegmentNode]; <> SetFP: PROCEDURE [segment: SegmentNode]; <> RemoveSegment: PROCEDURE [segmentList: SegmentList, segment: SegmentNode] RETURNS [newSegmentList: SegmentList, prevSegment: SegmentNode]; <> LastSegmentNode: PROCEDURE [list: SegmentList] RETURNS [segmentNode: SegmentNode]; <> FreeSegmentList: PROCEDURE [segmentList: SegmentList]; <> SwapSegments: PROCEDURE [segmentList: SegmentList, newSegments: SegmentList, oldSegment: SegmentNode, n: CARDINAL _ 1] RETURNS [newSegmentList, oldSegments: SegmentList]; <> <<>> <> InsertTrajectory: PROCEDURE [trajectoryList: TrajectoryList, trajectory: Trajectory, node: TrajectoryNode] RETURNS [newTrajectoryList: TrajectoryList, newNode: TrajectoryNode]; <> RemoveTrajectory: PROCEDURE [trajectoryList: TrajectoryList, trajectory: TrajectoryNode] RETURNS [newTrajectoryList: TrajectoryList, prevTrajectory: TrajectoryNode]; <> <<>> LastTrajectoryNode: PROCEDURE [list: TrajectoryList] RETURNS [trajectoryNode: TrajectoryNode]; <> <<>> FreeTrajectoryList: PROCEDURE [trajectoryList: TrajectoryList]; <> <<>> END.