generic type Item is private; package Generic_Lists is -- DESCRIPTION : -- This generic package allows to implement lists of items. type List is private; Null_List : constant List; Overflow : exception; List_Is_Null : exception; -- CONSTRUCTORS : procedure Construct ( i : in Item; l : in out List ); -- DESCRIPTION : -- Adds the item i to the front of the list l. procedure Set_Head ( l : in out List; i : in Item); -- DESCRIPTION : -- Sets the first element in the list to item i. -- REQUIRED : not Is_Null(l). procedure Swap_Tail ( l1,l2 : in out List ); -- DESCRIPTION : -- Swaps the tail of list l1 with the list l2. procedure Append ( first,last : in out List; i : in Item ); -- DESCRIPTION : -- Appends the item i to the list, where first points to the first -- element and last to its last element. procedure Concat ( first,last : in out List; l : in List ); -- DESCRIPTION : -- Concatenates the list l to the list first, where last points to -- the last element of the list. procedure Copy ( l1 : in List; l2 : in out List ); -- DESCRIPTION : -- Makes a copy from the list l1 to the list l2. -- SELECTORS : function Is_Equal ( l1,l2 : List ) return boolean; -- DESCRIPTION : -- Returns true if both lists are equal. function Length_Of ( l : List ) return natural; -- DESCRIPTION : -- Returns the length of the list, i.e.: the number of elements. function Is_Null ( l : List ) return boolean; -- DESCRIPTION : -- Returns true if the list is empty, false otherwise. function Head_Of ( l : List) return Item; -- DESCRIPTION : -- Returns the first element in the list. -- REQUIRED : not Is_Null(l). function Tail_Of ( l : List ) return List; -- DESCRIPTION : -- Returns the tail of the list l. -- REQUIRED : not Is_Null(l). -- DESTRUCTOR : procedure Clear ( l : in out List ); -- DESCRIPTION : -- Deallocates the memory occupied by the elements in the list. private type Node; type List is access Node; Null_List : constant List := null; end Generic_Lists;