-- Demonstrates creating and calling a generic array sort
with ada.text_io; use ada.text_io; 
with ada.float_text_io; use ada.float_text_io; 
 
 
with Ada.Containers.Generic_Constrained_Array_Sort;
use Ada.Containers;
procedure constrained_generic_sort  is 

   subtype List_Index is natural range 1 .. 4;

   type Flt_Array is array(List_Index) of Float;

   procedure fsort is new Ada.Containers.Generic_Constrained_Array_Sort(
      Index_Type => List_Index,
      Element_Type => Float, 
      Array_Type => Flt_Array);

   type Char_Array is array(List_Index) of Character;

   procedure sort is new 
      Generic_Constrained_Array_Sort(List_Index, Character, Char_Array);

   procedure put_line(a: Flt_Array) is
   begin
      for f of a loop
         put(f, 5, 1, 0);
      end loop;
      new_line;
   end put_line;

   procedure put_line(a: Char_Array) is
   begin
      for i of a loop
         put(i);
      end loop;
      new_line;
   end put_line;


   my_floats: Flt_Array := (20.0, 30.0, 10.0, 25.0);
   my_chars : Char_Array := ('j', 'p', 'b', 'n');    
begin
--   put_line(my_chars);
--   sort(my_chars);
--   put_line(my_chars);

   put_line(my_floats);
   fsort(my_floats);
   put_line(my_floats);
end constrained_generic_sort;
-- Output
-- jpbn
-- bjnp
--   20.0   30.0   10.0   25.0
--   10.0   20.0   25.0   30.0