DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: B T

⟦97d98ffea⟧ TextFile

    Length: 3048 (0xbe8)
    Types: TextFile
    Names: »B«

Derivation

└─⟦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⟧ 

TextFile

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