GENSEQUE.DEF 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. (*******************************************************************)
  2. (******** General support for sequences...no random access *********)
  3. (*******************************************************************)
  4. (* !NONREC *) DEFINITION MODULE GenSequenceSupport; (* kjg nov '84 *)
  5. FROM SYSTEM IMPORT ADDRESS;
  6. TYPE ElemPtr;
  7. TYPE Sequence = RECORD
  8. first : ElemPtr; (* ptr to first element *)
  9. last : ElemPtr (* ptr to last element *)
  10. END;
  11. PROCEDURE InitSequence(VAR seq : Sequence);
  12. (* sets all fields NIL *)
  13. PROCEDURE LinkLeft (VAR seq : Sequence; Element : ADDRESS);
  14. PROCEDURE LinkRight(VAR seq : Sequence; Element : ADDRESS);
  15. PROCEDURE InitCursor(seq : Sequence; VAR cursor : ElemPtr);
  16. (* postcondition: cursor is attached. GetNext will get first. *)
  17. PROCEDURE GetFirst( seq : Sequence;
  18. VAR cursor : ElemPtr;
  19. VAR result : ADDRESS );
  20. (* returns the first element. GetFirst on empty sequence rtns NIL *)
  21. (* postcondition: cursor is attached, next GetNext will fetch 2nd *)
  22. PROCEDURE GetNext( VAR cursor : ElemPtr;
  23. VAR result : ADDRESS );
  24. (* precondition: cursor is already attached. Returns element and- *)
  25. (* "increments" cursor. Returns NIL if sequence is already ended. *)
  26. PROCEDURE Ended(cursor : ElemPtr) : BOOLEAN;
  27. (* precondition: cursor is attached. Returns "cursor = NIL" *)
  28. PROCEDURE NextIsLast(cursor : ElemPtr) : BOOLEAN;
  29. (* precondition: cursor is attached. Returns "cursor = seq.last" *)
  30. PROCEDURE IsEmpty(seq : Sequence) : BOOLEAN;
  31. (* postcondition : returns "seq is the empty sequence" *)
  32. PROCEDURE LengthOf(seq : Sequence) : CARDINAL;
  33. PROCEDURE DisposeList(VAR seq : Sequence);
  34. (* returns list but not the linked nodes,
  35. also reinitializes the sequence header *)
  36. END GenSequenceSupport.
  37.