home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / MAGAZINE / MISC / ITPSEP90.ZIP / LINKLIST.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-09-04  |  2.4 KB  |  117 lines

  1. UNIT LinkList;
  2.  
  3. {-------------------------------------------------
  4. - Name   : LinkList                              -
  5. - Purpose: Generic linked list object            -
  6. -------------------------------------------------}
  7.  
  8. {***************************************************************}
  9.                           INTERFACE
  10. {***************************************************************}
  11.  
  12. TYPE
  13.  
  14.     { Generic Linked List Handler Definition }
  15.  
  16.   NodeValuePtr = ^NodeValue;
  17.  
  18.   NodeValue = OBJECT
  19.     CONSTRUCTOR Init;
  20.     DESTRUCTOR  Done; VIRTUAL;
  21.   END;
  22.  
  23.   NodePtr = ^Node;
  24.   Node = RECORD
  25.     Retrieve : NodeValuePtr;
  26.     Next     : NodePtr;
  27.   END;
  28.  
  29.  
  30.     { Specific Linked List Handler Definition }
  31.  
  32.   NodeListPtr = ^NodeList;
  33.  
  34.   NodeList = OBJECT
  35.     Items : NodePtr;
  36.     CONSTRUCTOR Init;
  37.     DESTRUCTOR Done; VIRTUAL;
  38.     PROCEDURE Add (A_Value : NodeValuePtr);
  39.  
  40.     (* Iterator Functions *)
  41.  
  42.     PROCEDURE StartIterator (VAR Ptr : NodePtr);
  43.     PROCEDURE NextValue (VAR Ptr : NodePtr);
  44.     FUNCTION AtEndOfList (Ptr : NodePtr) : Boolean;
  45.   END;
  46.  
  47. {***************************************************************}
  48.                          IMPLEMENTATION
  49. {***************************************************************}
  50.  
  51.  
  52. CONSTRUCTOR NodeValue.Init;
  53. BEGIN
  54. END;
  55.  
  56. DESTRUCTOR NodeValue.Done;
  57. BEGIN
  58. END;
  59.  
  60. CONSTRUCTOR NodeList.Init;
  61. BEGIN
  62.   Items := NIL;
  63. END;
  64.  
  65. DESTRUCTOR NodeList.Done;
  66.     VAR
  67.          Temp : NodePtr;
  68. BEGIN
  69.     WHILE Items <> NIL DO
  70.     BEGIN
  71.          Temp := Items;
  72.          IF Temp^.Retrieve <> NIL THEN
  73.               Dispose (Temp^.Retrieve, Done);
  74.          Items := Items^.Next;
  75.          Dispose (Temp);
  76.     END;
  77. END;
  78.  
  79. PROCEDURE NodeList.Add (A_Value : NodeValuePtr);
  80.     VAR
  81.          Cell : NodePtr;
  82.          Temp : NodePtr;
  83. BEGIN
  84.     (* Go TO the END OF the linked list. *)
  85.     Cell := Items;
  86.     IF Cell <> NIL THEN
  87.          WHILE Cell^.Next <> NIL DO
  88.               Cell := Cell^.Next;
  89.  
  90.     New (Temp);
  91.     Temp^.Retrieve := A_Value;
  92.     Temp^.Next := NIL;
  93.     IF Items = NIL
  94.     THEN
  95.          Items := Temp
  96.     ELSE
  97.          Cell^.Next := Temp;
  98. END;
  99.  
  100. PROCEDURE NodeList.StartIterator (VAR Ptr : NodePtr);
  101. BEGIN
  102.     Ptr := Items;
  103. END;
  104.  
  105. PROCEDURE NodeList.NextValue (VAR Ptr : NodePtr);
  106. BEGIN
  107.     IF Ptr <> NIL THEN
  108.     Ptr := Ptr^.Next;
  109. END;
  110.  
  111. FUNCTION NodeList.AtEndOfList (Ptr : NodePtr) : Boolean;
  112. BEGIN
  113.   AtEndOfList := (Ptr = NIL);
  114. END;
  115.  
  116. END.
  117.