-- /ivy/binding/ropesets/RopeSets.mesa -- Defining a double linked list of Rope.ROPE -- Last edited by: Binding, August 8, 1984 7:45:58 am PDT DIRECTORY Rope USING [ ROPE] ; RopeSets: CEDAR DEFINITIONS = BEGIN <> <> <> Direction: TYPE = { Left, Right}; RopeSetEl: TYPE = RECORD [ Value: Rope.ROPE _ NIL, Next: REF RopeSetEl _ NIL, Prev: REF RopeSetEl _ NIL ]; RopeSet: TYPE = RECORD [ Head: REF RopeSetEl _ NIL, Tail: REF RopeSetEl _ NIL ]; <> IsSetEmpty: PROCEDURE [ set: RopeSet] RETURNS [ BOOLEAN] = INLINE BEGIN RETURN[ set.Head = NIL]; END; -- IsSetEmpty IsValueInSet: PROCEDURE [ val: Rope.ROPE, set: RopeSet] RETURNS [ BOOLEAN]; InsertValueIntoSet: PROCEDURE [ val: Rope.ROPE, set: RopeSet] RETURNS [ newSet: RopeSet]; DeleteValueFromSet: PROCEDURE [ val: Rope.ROPE, set: RopeSet] RETURNS [ newSet: RopeSet]; <> Union: PROCEDURE [ set1, set2: RopeSet] RETURNS [ set: RopeSet]; <> Intersection: PROCEDURE [ set1, set2: RopeSet] RETURNS [ set: RopeSet]; <> Difference: PROCEDURE [ set1, set2: RopeSet] RETURNS [ set: RopeSet]; <> MinMaxValues: PROCEDURE [ set: RopeSet] RETURNS [ min, max: Rope.ROPE] = INLINE BEGIN <> IF set.Head = NIL THEN RETURN[ NIL, NIL]; RETURN[ set.Head.Value, set.Tail.Value]; END; -- MinMaxValues MoveRover: PROCEDURE [ rover: REF RopeSetEl, dir: Direction, howFar: CARDINAL, passLast: BOOLEAN] RETURNS [ newRover: REF RopeSetEl]; < length of the list>> <> <> END.