package body X0que is

    --EMPTY A QUEUE
    procedure Make_Empty (Q : in out Queue) is
    begin
        Q.Qctr := 0;
    end Make_Empty;

    --TEST IF A QUEUE IS EMPTY
    function Is_Empty (Q : in Queue) return Boolean is
    begin
        return Q.Qctr = 0;
    end Is_Empty;

    --TEST IF A QUEUE IS NOT EMPTY
    function Is_Not_Empty (Q : in Queue) return Boolean is
    begin
        return Q.Qctr /= 0;
    end Is_Not_Empty;

    --TEST IF A QUEUE IS FULL
    function Is_Full (Q : in Queue) return Boolean is
    begin
        return Q.Qctr = Max;
    end Is_Full;

    --ADD AN ELEMENT_TYPE TO THE END OF THE QUEUE
    procedure Put_End (Q : in out Queue; C : in Element_Type) is
    begin
        Q.Qctr := Q.Qctr + 1;
        Q.Qu (Q.Qctr) := C;
    end Put_End;

    --GET AN ELEMENT_TYPE FROM THE FRONT OF THE QUEUE
    procedure Get_End (Q : in out Queue; C : out Element_Type) is
    begin
        C := Q.Qu (Q.Qctr);
        Q.Qctr := Q.Qctr - 1;
    end Get_End;

    --ASSIGN THE FIRST QUEUE TO THE SECOND QUEUE
    procedure Assign (Qin : in Queue; Qout : out Queue) is
    begin
        Qout.Qctr := Qin.Qctr;
        Qout.Qu := Qin.Qu;
    end Assign;

end X0que;