SingleLinkedList.mod 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. IMPLEMENTATION MODULE SingleLinkedList;
  2. FROM SYSTEM IMPORT ADDRESS;
  3. FROM Storage IMPORT ALLOCATE, DEALLOCATE;
  4. TYPE
  5. ElementPtr = POINTER TO Element;
  6. Element = RECORD
  7. pos : CARDINAL;
  8. next : ElementPtr;
  9. item : ADDRESS;
  10. END;
  11. List = POINTER TO ListRec;
  12. ListRec = RECORD
  13. firstElement : ElementPtr;
  14. lastElement : ElementPtr;
  15. homogene : BOOLEAN; (* allows or not homogene items *)
  16. CheckType : PROC; (* procedure to check if the elements are of the same type *)
  17. END;
  18. (*
  19. PROCEDURE SearchItem ( item : ; compare : PROC ) : BOOLEAN;
  20. BEGIN
  21. ;
  22. END Seach;
  23. PROCEDURE Traverse (l : List; toDo : PROC);
  24. BEGIN
  25. ;
  26. END Traverse;
  27. *)
  28. PROCEDURE Empty (l : List): BOOLEAN ;
  29. BEGIN
  30. IF l^.firstElement = NIL THEN
  31. RETURN TRUE
  32. ELSE
  33. RETURN FALSE
  34. END
  35. END Empty;
  36. (*
  37. PROCEDURE RemoveItem (): BOOLEAN;
  38. BEGIN
  39. ;
  40. END Remove;
  41. PROCEDURE AddItem (): BOOLEAN;
  42. BEGIN
  43. ;
  44. END Add;
  45. *)
  46. PROCEDURE DeleteAllItems (l : List);
  47. BEGIN
  48. END DeleteAllItems;
  49. PROCEDURE Free ( VAR l : List);
  50. BEGIN
  51. DeleteAllItems(l);
  52. l^.firstElement := NIL;
  53. l^.homogene := TRUE ;
  54. l^.CheckType := NIL;
  55. DISPOSE (l);
  56. END Free;
  57. PROCEDURE Init ( VAR l : List; mode : BOOLEAN ; p : PROC );
  58. BEGIN
  59. NEW (l);
  60. l^.firstElement := NIL;
  61. l^.homogene := mode;
  62. l^.CheckType := p;
  63. END Init;
  64. BEGIN
  65. (* Initialization of the SingleLinkedList structure *)
  66. END SingleLinkedList.