package body Generator_Of_Discrete_Items is

    procedure Generate_Vector (Vector : in out Vector_Type) is
        Temp : Item_Type;
    begin
        for I in Vector'Range loop
            Vector (I) := I;
        end loop;
        for I in reverse Vector'Range loop
            if I mod 3 /= 0 then
                Temp := Vector (Vector'First);
                Vector (Vector'First) := Vector (I);
                Vector (I) := Temp;
            end if;
        end loop;
    end Generate_Vector;

    procedure Generate_Vector2 (Vector : in out Vector_Type) is
        Temp : Item_Type;
    begin
        for I in Vector'Range loop
            Vector (I) := I + Vector'Last;
        end loop;
        for I in reverse Vector'Range loop
            if I mod 3 /= 0 then
                Temp := Vector (Vector'First);
                Vector (Vector'First) := Vector (I);
                Vector (I) := Temp;
            end if;
        end loop;
    end Generate_Vector2;

    procedure Generate_Ascending_Vector (Vector : in out Vector_Type) is
    begin
        for I in Vector'Range loop
            Vector (I) := I;
        end loop;
    end Generate_Ascending_Vector;

    procedure Generate_Descending_Vector (Vector : in out Vector_Type) is
    begin
        for I in Vector'Range loop
            Vector (I) := Vector'Last - I + Vector'First;
        end loop;  
    end Generate_Descending_Vector;

    procedure Generate_Full_Vector (Vector : in out Vector_Type) is
    begin
        for I in 1 .. Max_Item loop
            Vector (I) := I;
        end loop;
    exception
        when Constraint_Error =>
            raise Vector_Bound_Error;
    end Generate_Full_Vector;

end Generator_Of_Discrete_Items;