IMPLEMENTATION MODULE SingleLinkedList; FROM SYSTEM IMPORT ADDRESS; FROM Storage IMPORT ALLOCATE, DEALLOCATE; TYPE ElementPtr = POINTER TO Element; Element = RECORD pos : CARDINAL; next : ElementPtr; item : ADDRESS; END; List = POINTER TO ListRec; ListRec = RECORD firstElement : ElementPtr; lastElement : ElementPtr; homogene : BOOLEAN; (* allows or not homogene items *) CheckType : PROC; (* procedure to check if the elements are of the same type *) END; (* PROCEDURE SearchItem ( item : ; compare : PROC ) : BOOLEAN; BEGIN ; END Seach; PROCEDURE Traverse (l : List; toDo : PROC); BEGIN ; END Traverse; *) PROCEDURE Empty (l : List): BOOLEAN ; BEGIN IF l^.firstElement = NIL THEN RETURN TRUE ELSE RETURN FALSE END END Empty; (* PROCEDURE RemoveItem (): BOOLEAN; BEGIN ; END Remove; PROCEDURE AddItem (): BOOLEAN; BEGIN ; END Add; *) PROCEDURE DeleteAllItems (l : List); BEGIN END DeleteAllItems; PROCEDURE Free ( VAR l : List); BEGIN DeleteAllItems(l); l^.firstElement := NIL; l^.homogene := TRUE ; l^.CheckType := NIL; DISPOSE (l); END Free; PROCEDURE Init ( VAR l : List; mode : BOOLEAN ; p : PROC ); BEGIN NEW (l); l^.firstElement := NIL; l^.homogene := mode; l^.CheckType := p; END Init; BEGIN (* Initialization of the SingleLinkedList structure *) END SingleLinkedList.