|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 6144 (0x1800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, generic, package Lists, seg_0043ed
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
--| @SUMMARY This package implements a singly-linked list abstraction.
generic
type Element is private;
package Lists is
type List is private;
function Create return List;
--
-- Returns an empty list.
function Is_Empty (This_List : in List) return Boolean;
--
-- Returns True if the specified list contains no elements.
function Elements_In (This_List : in List) return Natural;
--
-- Returns the number of elements in the specified list.
generic
with function Copy (Of_Element : in Element) return Element;
function Copy (Of_List : in List) return List;
--
-- Returns a copy of the specified list using the supplied copy
-- function to copy the individual elements. If the supplied copy
-- function provides a true (non-aliased) copy of the elements, then
-- the resulting copied list will be a true copy of the original
-- list.
--
-- Very different from ":=".
procedure Reset (This_List : in out List);
--
-- Resets the current element in the list to be the first element.
--
-- If the list is empty, has no effect (the list remains "Done").
function Done (This_List : in List) return Boolean;
--
-- Returns True if the list has been advanced past the last element,
-- or if the list is empty. Note that empty lists are always "Done",
-- but "Done" lists are not necessarily empty.
procedure Next (This_List : in out List);
--
-- Advances the current element in the list to the next element.
--
-- Raises "No_Next_Element" if "Done".
function Current (This_List : in List) return Element;
--
-- Returns the current element in the list.
--
-- Raises "No_Current_Element" if "Done".
type Positions is new Positive; -- Elements are numbered 1..N
function Position (In_List : in List) return Positions;
-- -- Returns the position corresponding to the current element in the list.
--
-- Raises "No_Current_Element" if already "Done".
procedure Set (This_List : in out List; To_Position : in Positions);
--
-- Sets the current element in the list to the specified position.
--
-- Raises "Out_Of_Range" if the specified position is out of range.
function Element_At (This_Position : in Positions; In_List : in List)
return Element;
--
-- Returns the element corresponding to the specified position.
--
-- Raises "Out_Of_Range" if the specified position is out of range.
function Exists
(In_This_List : List; This_Element : Element) return Boolean;
-- determines if an element exists within a list
procedure Add (To_List : in out List;
This_Element : in Element);
--
-- Adds the specified element to the end of the list.
--
-- Does not alter iterator state. The iterator is still pointing to the
-- same element as it was before the operation (the only exception to
-- this is if the element just added is the only element in the list,
-- in which case it becomes the first element, the last element, the
-- current position, and the current element simultaneously).
procedure Insert (To_List : in out List;
This_Element : in Element;
Before_This_Position : in Positions);
-- inserts an element in the middle of the list
procedure Modify (This_List : in out List; New_Element : in Element);
--
-- Replaces the current element in the list with the new element.
-- Can be called during iteration without altering iterator's position.
--
-- Raises "No_Current_Element" if "Done".
No_Current_Element : exception;
No_Next_Element : exception;
Out_Of_Range : exception;
-- Note: the "Add" operation propagates Storage_Error if it occurs.
private
type Node;
type Pointer is access Node;
type Node is
record
Contents : Element;
Next : Pointer := null;
end record;
type List is
record
First : Pointer := null;
Last : Pointer := null;
Current : Pointer := null;
Position : Natural := 0;
Count : Natural := 0;
end record;
end Lists;
nblk1=5
nid=0
hdr6=a
[0x00] rec0=23 rec1=00 rec2=01 rec3=022
[0x01] rec0=1e rec1=00 rec2=02 rec3=002
[0x02] rec0=1a rec1=00 rec2=03 rec3=004
[0x03] rec0=15 rec1=00 rec2=04 rec3=02e
[0x04] rec0=1a rec1=00 rec2=05 rec3=000
tail 0x21700169e815c6353777f 0x42a00088462061e03