| 1234567891011121314151617181920212223 |
- GENERIC DEFINITION MODULE DList (T : TYPE);
- (* A generic doubly linked list. *)
- TYPE
- Node = POINTER TO NodeRec;
- NodeRec = RECORD
- val : T;
- prev, next : Node;
- END;
- List = RECORD
- head, tail : Node;
- count : INTEGER;
- END;
- PROCEDURE Init(VAR l : List);
- PROCEDURE Append(VAR l : List; v : T);
- PROCEDURE Prepend(VAR l : List; v : T);
- PROCEDURE Count(VAR l : List) : INTEGER;
- PROCEDURE Get(VAR l : List; i : INTEGER) : T;
- PROCEDURE Sum(VAR l : List) : T; (* arithmetic over the formal T *)
- PROCEDURE Reverse(VAR l : List);
- PROCEDURE ForEach(VAR l : List; (* a procedure parameter *)
- visit : PROCEDURE(VAR acc : INTEGER; v : T);
- VAR acc : INTEGER);
- END DList.
|