CARDSEQU.DEF 1.8 KB

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