generic

    type Element_Type is private;  --TYPE OF ELEMENTS IN SET

package X0set is

    --FACILITY TO GIVE USER CAPABILITY TO USE SET OPERATIONS AS

    --DEFINED FOR PDL/ADA.



    type Set is limited private;



    --  EMPTY_SET_ERROR : EXCEPTION;



    procedure Put_Member (S : in out Set; A : in Element_Type);

    --ADD A MEMBER TO THE SET IF IT IS NOT ALREADY THERE

    procedure Get_Member (S : in out Set; A : in out Element_Type);

    --ASSIGN A RANDOMLY SELECTED MEMBER OF S TO A; DELETE IT FROM S

    procedure Make_Empty (S : in out Set);

    --CLEAR A SET

    function Is_Empty (S : in Set) return Boolean;

    --TEST FOR AN EMPTY SET

    function Is_Not_Empty (S : in Set) return Boolean;

    --TEST FOR NON-EMPTY SET

    function Null_Set return Set;

    --RETURNS THE NULL SET

    procedure Assign (S1 : in Set; S2 : out Set);

    --ASSIGN FIRST SET TO SECOND SET



private

    type Setnode;



    type Setptr is access Setnode;



    type Setnode is

        record

            Setdata : Element_Type;

            Next : Setptr;

        end record;



    type Set is

        record

            Count : Integer := 0;

            Head : Setptr := null;

            Ranseed : Integer := 3657;

        end record;



end X0set;

