|
|
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: 3048 (0xbe8)
Types: TextFile
Names: »B«
└─⟦180fe333a⟧ Bits:30000405 8mm tape, Rational 1000, SW CATALOG, 10_20_0
└─⟦180fe333a⟧ Bits:30000537 8mm tape, Rational 1000, SW Catalog 10_20_0
└─⟦5cb1d1d7f⟧ »DATA«
└─⟦3b1ee7bd8⟧
└─⟦this⟧
package body X0set is
procedure Put_Member (S : in out Set; A : in Element_Type) is
--ADD A MEMBER TO THE SET IF IT IS NOT ALREADY THERE
Scan : Setptr := S.Head;
Found : Boolean := False;
I : Integer := 1;
begin
while I <= S.Count and not Found loop
if Scan.Setdata = A then
Found := True;
end if;
Scan := Scan.Next;
I := I + 1;
end loop;
if not Found then
Scan := new Setnode;
Scan.Setdata := A;
Scan.Next := S.Head;
S.Head := Scan;
S.Count := S.Count + 1;
end if;
end Put_Member;
procedure Get_Member (S : in out Set; A : in out Element_Type) is
--ASSIGN A RANDOMLY SELECTED MEMBER OF S TO A; DELETE IT FROM S
Result : Integer;
Scan : Setptr := S.Head;
Prev : Setptr := S.Head;
procedure Rand (Lower : in Integer := 0; --LOWER BOUND
Upper : in Integer := 10; --UPPER BOUND
Prev : in out Integer; --VALUE USED TO COMPUTE NEXT
Result : out Integer) is
A : Integer := 3;
M : Integer := 2#1111111111011#;
begin
Prev := (A * Prev) mod M;
Result := (Prev mod (Upper - Lower + 1)) + Lower;
end Rand;
begin
-- IF IS_EMPTY(S) THEN
-- RAISE EMPTY_SET_ERROR;
-- ELSE
Rand (0, S.Count - 1, S.Ranseed, Result);
for I in 1 .. Result loop
Prev := Scan;
Scan := Scan.Next;
end loop;
A := Scan.Setdata;
if Result = 0 then
S.Head := S.Head.Next;
else
Prev.Next := Scan.Next;
end if;
S.Count := S.Count - 1;
-- END IF;
end Get_Member;
procedure Make_Empty (S : in out Set) is
--CLEAR A SET
Temp : Set;
begin
S := Temp;
end Make_Empty;
function Is_Empty (S : in Set) return Boolean is
--TEST FOR AN EMPTY SET
begin
return S.Count = 0;
end Is_Empty;
function Is_Not_Empty (S : in Set) return Boolean is
--TEST FOR NON-EMPTY SET
begin
return S.Count /= 0;
end Is_Not_Empty;
function Null_Set return Set is
--RETURNS THE NULL SET
Temp : Set;
begin
return Temp;
end Null_Set;
procedure Assign (S1 : in Set; S2 : out Set) is
Scan : Setptr := S1.Head;
Ts2 : Set;
begin
Make_Empty (Ts2);
for I in 1 .. S1.Count loop
Put_Member (Ts2, Scan.Setdata);
Scan := Scan.Next;
end loop;
S2.Count := Ts2.Count;
S2.Head := Ts2.Head;
S2.Ranseed := Ts2.Ranseed;
end Assign;
end X0set;
--THIS PACKAGE PROVIDES THE USER WITH A FACILITY WHICH ALLOWS
--DECLARATION AND MANIPULATION OF SEQUENCES OF OBJECTS