|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 8655 (0x21cf)
Types: TextFile
Names: »B«
└─⟦149519bd4⟧ Bits:30000546 8mm tape, Rational 1000, !projects 93-07-13
└─⟦124ff5788⟧ »DATA«
└─⟦this⟧
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11
└─⟦129cab021⟧ »DATA«
└─⟦this⟧
└─⟦f64eaa120⟧ Bits:30000752 8mm tape, Rational 1000, !projects 93 02 16
└─⟦6f12a12be⟧ »DATA«
└─⟦this⟧
└─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04
└─⟦d65440be7⟧ »DATA«
└─⟦this⟧
-------------------------------------------------------------------------------
with Table_Sort_Generic;
with Text_Io;
package body Static_List_Generic is
---------------------------------------------------------------------------
function Is_Full (The_Object : Object) return Boolean is
begin
return (The_Object.Size = The_Object.The_Table'Last);
end Is_Full;
---------------------------------------------------------------------------
function Add (X : Element; Into : Object) return Object is
begin
if (Is_Full (Into)) then
raise Full_Error;
end if;
declare
L_Bis : Object := Into;
begin
L_Bis.The_Table (L_Bis.Size + 1) := X;
L_Bis.Size := Natural'Succ (L_Bis.Size);
return L_Bis;
end;
end Add;
---------------------------------------------------------------------------
function Null_Object return Object is
The_List : Object;
begin
The_List.Size := 0;
return The_List;
end Null_Object;
---------------------------------------------------------------------------
function Is_Empty (The_Object : Object) return Boolean is
begin
return (The_Object.Size = 0);
end Is_Empty;
---------------------------------------------------------------------------
procedure Free (The_Object : in out Object) is
begin
The_Object.Size := 0;
end Free;
---------------------------------------------------------------------------
function First (The_Object : Object) return Element is
begin
if (Is_Empty (The_Object)) then
raise Empty_Error;
end if;
return (The_Object.The_Table (The_Object.Size));
end First;
---------------------------------------------------------------------------
function Rest (The_Object : Object) return Object is
begin
if (Is_Empty (The_Object)) then
raise Empty_Error;
end if;
declare
L_Bis : Object := The_Object;
begin
L_Bis.Size := Natural'Pred (L_Bis.Size);
return L_Bis;
end;
end Rest;
---------------------------------------------------------------------------
procedure Set_Rest (The_Object : in out Object; To_Be : Object) is
begin
if (Is_Empty (The_Object)) then
raise Empty_Error;
end if;
if (Is_Full (To_Be)) then
raise Full_Error;
end if;
The_Object := Add (First (The_Object), To_Be);
end Set_Rest;
---------------------------------------------------------------------------
procedure Set_First (The_Object : in out Object; To_Be : Element) is
begin
if (Is_Empty (The_Object)) then
raise Empty_Error;
end if;
The_Object.The_Table (The_Object.Size) := To_Be;
end Set_First;
---------------------------------------------------------------------------
function Length (The_Object : Object) return Natural is
begin
return (The_Object.Size);
end Length;
---------------------------------------------------------------------------
procedure Sort (The_Object : in out Object) is
begin
declare
subtype Index_Table is Index range 1 .. Length (The_Object);
type Table_Element is array (Index_Table range <>) of Element;
procedure Table_Sort is
new Table_Sort_Generic (Element => Element,
Index => Index_Table,
Element_Array => Table_Element,
"<" => "<");
The_Table : Table_Element (Index_Table);
begin
for I in Index_Table loop
The_Table (I) := The_Object.The_Table (I);
end loop;
Table_Sort (The_Table);
for I in Index_Table loop
The_Object.The_Table (Index_Table'Last - I + 1) :=
The_Table (I);
end loop;
end;
end Sort;
---------------------------------------------------------------------------
procedure Init (Iter : out Iterator; The_Object : Object) is
begin
if (Length (The_Object) = 0) then
Iter.Index_Value := 1;
Iter.Done := True;
else
Iter.Index_Value := Length (The_Object);
Iter.Done := False;
end if;
end Init;
---------------------------------------------------------------------------
procedure Next (Iter : in out Iterator; The_Object : Object) is
begin
if (not Iter.Done) then
if (Iter.Index_Value = The_Object.The_Table'First) then
Iter.Done := True;
else
Iter.Index_Value := Natural'Pred (Iter.Index_Value);
end if;
end if;
end Next;
---------------------------------------------------------------------------
function Value (Iter : Iterator; The_Object : Object) return Element is
begin
return (The_Object.The_Table (Iter.Index_Value));
end Value;
---------------------------------------------------------------------------
function Done (Iter : Iterator; The_Object : Object) return Boolean is
begin
return (Iter.Done);
end Done;
---------------------------------------------------------------------------
function Image (The_Object : Object) return String is
Iter : Iterator;
begin
declare
function In_Text (Iter : Iterator) return String is
begin
if (Done (Iter, The_Object)) then
return "";
end if;
declare
The_Element : Element := Value (Iter, The_Object);
Iter_Bis : Iterator := Iter;
begin
Next (Iter_Bis, The_Object);
if (not Done (Iter_Bis, The_Object)) then
return Image (The_Element) & Separator &
In_Text (Iter_Bis);
else
return Image (The_Element);
end if;
end;
end In_Text;
begin
Init (Iter, The_Object);
return Natural'Image (Length (The_Object)) &
Separator & In_Text (Iter);
end;
end Image;
---------------------------------------------------------------------------
procedure Display (The_Object : Object; String_Before : String := "") is
Iter : Iterator;
begin
Text_Io.Put_Line (String_Before & "The_Object =>");
Text_Io.Put_Line (String_Before & " Size => " &
Natural'Image (Length (The_Object)));
Text_Io.Put_Line (String_Before & " Elements => ");
Init (Iter, The_Object);
while not Done (Iter, The_Object) loop
Display (Value (Iter, The_Object), String_Before & " ");
Next (Iter, The_Object);
end loop;
end Display;
---------------------------------------------------------------------------
function Is_Equal (Left, Right : Object) return Boolean is
Iter_Left : Iterator;
Iter_Right : Iterator;
begin
Init (Iter_Left, Left);
Init (Iter_Right, Right);
while (not Done (Iter_Left, Left) and not Done (Iter_Right, Right)) loop
if (not Is_Equal (Value (Iter_Left, Left),
Value (Iter_Right, Right))) then
return False;
end if;
Next (Iter_Left, Left);
Next (Iter_Right, Right);
end loop;
return Done (Iter_Left, Left) and Done (Iter_Right, Right);
end Is_Equal;
---------------------------------------------------------------------------
function Is_Element (The_Element : Element; Of_The_Object : Object)
return Boolean is
Iter : Iterator;
begin
Init (Iter, Of_The_Object);
while (not Done (Iter, Of_The_Object)) loop
if (Is_Equal (Value (Iter, Of_The_Object), The_Element)) then
return True;
end if;
Next (Iter, Of_The_Object);
end loop;
return False;
end Is_Element;
end Static_List_Generic;
-------------------------------------------------------------------------------