Hosted by
 |
generic
type Content_Type is private;
package Lists is
type List is private;
type Item is private;
Empty_List : constant List;
procedure Push
(This : in out List;
Content : in Content_Type);
procedure Unshift
(This : in out List;
Content : in Content_Type);
procedure Append
(This : in out List;
Tail : in out List);
function Count
(This : in List)
return Natural;
function Empty
(This : in List)
return Boolean;
function Index
(This : in List)
return Natural;
function First
(This : in List)
return Content_Type;
function Last
(This : in List)
return Content_Type;
procedure Reset
(This : in List);
procedure Next
(This : in List);
function Next
(This : in List)
return Boolean;
function Next_Available
(This : in List)
return Boolean;
function Next_Content
(This : in List)
return Content_Type;
function End_Of_List
(This : in List)
return Boolean;
function Current
(This : in List)
return Content_Type;
procedure Update_Current
(This : in List;
Content : in Content_Type);
procedure Remove_Current
(This : in out List);
procedure Insert_Before_Current
(This : in out List;
Content : in Content_Type);
procedure Insert_After_Current
(This : in out List;
Content : in Content_Type);
function First_Item
(This : in List)
return Item;
function Last_Item
(This : in List)
return Item;
procedure Next_Item
(This : in out Item);
function Next_Item
(This : in Item)
return Item;
function Item_Invalid
(This : in Item)
return Boolean;
function Item_Equals
(This : in Item;
Other : in Item)
return Boolean;
function Item_Content
(This : in Item)
return Content_Type;
procedure Update_Item
(This : in Item;
Content : in Content_Type);
procedure Remove_Item
(Previous : in Item;
This : in out Item;
Context : in out List);
private
type Item_Record;
type Item is access Item_Record;
type Item_Record is record
Next : Item := null;
Content : Content_Type;
end record;
type List_Record is record
Count : Natural := 0;
Index : Natural := 0;
First : Item := null;
Last : Item := null;
Prev : Item := null;
Current : Item := null;
Next : Item := null;
end record;
type List is access List_Record;
Empty_List : constant List := null;
end Lists;
|