showcase23lib.def 743 B

1234567891011121314151617181920212223
  1. GENERIC DEFINITION MODULE DList (T : TYPE);
  2. (* A generic doubly linked list. *)
  3. TYPE
  4. Node = POINTER TO NodeRec;
  5. NodeRec = RECORD
  6. val : T;
  7. prev, next : Node;
  8. END;
  9. List = RECORD
  10. head, tail : Node;
  11. count : INTEGER;
  12. END;
  13. PROCEDURE Init(VAR l : List);
  14. PROCEDURE Append(VAR l : List; v : T);
  15. PROCEDURE Prepend(VAR l : List; v : T);
  16. PROCEDURE Count(VAR l : List) : INTEGER;
  17. PROCEDURE Get(VAR l : List; i : INTEGER) : T;
  18. PROCEDURE Sum(VAR l : List) : T; (* arithmetic over the formal T *)
  19. PROCEDURE Reverse(VAR l : List);
  20. PROCEDURE ForEach(VAR l : List; (* a procedure parameter *)
  21. visit : PROCEDURE(VAR acc : INTEGER; v : T);
  22. VAR acc : INTEGER);
  23. END DList.