-- This shows the use of GENERIC_SORT on simple arrays. -- Each type of array is sorted both forward and backward. with GENERIC_SORT ; with TEXT_IO ; use TEXT_IO ; procedure GENERIC_SORT_DEMO_1 is -- a test of five types as -- elements of arrays using -- two generic sort procedures type INT_ARRAY is array( INTEGER range <> ) of INTEGER ; INT_DATA : INT_ARRAY(1..4) := ( 3, 4, 1, 2) ; type FLT_ARRAY is array( INTEGER range <> ) of FLOAT ; FLT_DATA : FLT_ARRAY(1..4) := ( 3.0, 4.0, 1.0, 2.0) ; subtype MY_STRING is STRING(1..3) ; type STR_ARRAY is array( INTEGER range <> ) of MY_STRING ; STR_DATA : STR_ARRAY(1..4) := ( "CCC", "DDD", "AAA", "BBB") ; type MY_ENUM is ( FIRST , SECOND, THIRD, FOURTH ) ; type ENU_ARRAY is array( INTEGER range <> ) of MY_ENUM ; ENU_DATA : ENU_ARRAY(1..4) := ( THIRD, FOURTH, FIRST, SECOND ) ; type MY_FIXED is delta 0.01 range - 20.0 .. 20.0 ; type FIX_ARRAY is array ( INTEGER range <> ) of MY_FIXED ; FIX_DATA : FIX_ARRAY(1..4) :=( 3.1, 4.1, 1.1, 2.1 ) ; -- The following 5 pairs of instantiations are for the 5 groups -- of declarations above. package INT_SORT_UP is new GENERIC_SORT(INTEGER,INTEGER,INT_ARRAY) ; package INT_SORT_DN is new GENERIC_SORT(INTEGER,INTEGER,INT_ARRAY,"<") ; package FLT_SORT_UP is new GENERIC_SORT(FLOAT,INTEGER,FLT_ARRAY) ; package FLT_SORT_DN is new GENERIC_SORT(FLOAT,INTEGER,FLT_ARRAY,"<") ; package STR_SORT_UP is new GENERIC_SORT(MY_STRING,INTEGER,STR_ARRAY) ; package STR_SORT_DN is new GENERIC_SORT(MY_STRING,INTEGER,STR_ARRAY,"<") ; package ENU_SORT_UP is new GENERIC_SORT(MY_ENUM,INTEGER,ENU_ARRAY) ; package ENU_SORT_DN is new GENERIC_SORT(MY_ENUM,INTEGER,ENU_ARRAY,"<") ; package FIX_SORT_UP is new GENERIC_SORT(MY_FIXED,INTEGER,FIX_ARRAY) ; package FIX_SORT_DN is new GENERIC_SORT(MY_FIXED,INTEGER,FIX_ARRAY,"<") ; package INT_IO is new INTEGER_IO(INTEGER) ; use INT_IO ; package FLT_IO is new FLOAT_IO(FLOAT) ; use FLT_IO ; package ENU_IO is new ENUMERATION_IO(MY_ENUM) ; use ENU_IO ; package FIX_IO is new FIXED_IO(MY_FIXED) ; use FIX_IO ; begin -- -- Sort each array smallest to largest -- INT_SORT_UP.SORT(INT_DATA) ; FLT_SORT_UP.SORT(FLT_DATA) ; STR_SORT_UP.SORT(STR_DATA) ; ENU_SORT_UP.SORT(ENU_DATA) ; FIX_SORT_UP.SORT(FIX_DATA) ; -- print results PUT_LINE(" UP SORTED DATA ") ; for I in INT_DATA'RANGE loop PUT(INT_DATA(I)); PUT(' '); PUT(FLT_DATA(I)); PUT(' '); PUT(STR_DATA(I)); PUT(' '); PUT(ENU_DATA(I)); PUT(' '); PUT(FIX_DATA(I)); NEW_LINE; end loop ; -- -- Sort each array largest to smallest -- INT_SORT_DN.SORT(INT_DATA) ; FLT_SORT_DN.SORT(FLT_DATA) ; STR_SORT_DN.SORT(STR_DATA) ; ENU_SORT_DN.SORT(ENU_DATA) ; FIX_SORT_DN.SORT(FIX_DATA) ; -- print results PUT_LINE(" DOWN SORTED DATA ") ; for I in INT_DATA'RANGE loop PUT(INT_DATA(I)); PUT(' '); PUT(FLT_DATA(I)); PUT(' '); PUT(STR_DATA(I)); PUT(' '); PUT(ENU_DATA(I)); PUT(' '); PUT(FIX_DATA(I)); NEW_LINE; end loop ; -- -- Repeat the above tests with SMALL_SORT -- INT_SORT_UP.SMALL_SORT(INT_DATA) ; FLT_SORT_UP.SMALL_SORT(FLT_DATA) ; STR_SORT_UP.SMALL_SORT(STR_DATA) ; ENU_SORT_UP.SMALL_SORT(ENU_DATA) ; FIX_SORT_UP.SMALL_SORT(FIX_DATA) ; -- print results PUT_LINE(" UP SORTED DATA, SMALL SORT ") ; for I in INT_DATA'RANGE loop PUT(INT_DATA(I)); PUT(' '); PUT(FLT_DATA(I)); PUT(' '); PUT(STR_DATA(I)); PUT(' '); PUT(ENU_DATA(I)); PUT(' '); PUT(FIX_DATA(I)); NEW_LINE; end loop ; -- INT_SORT_DN.SMALL_SORT(INT_DATA) ; FLT_SORT_DN.SMALL_SORT(FLT_DATA) ; STR_SORT_DN.SMALL_SORT(STR_DATA) ; ENU_SORT_DN.SMALL_SORT(ENU_DATA) ; FIX_SORT_DN.SMALL_SORT(FIX_DATA) ; -- print results PUT_LINE(" DOWN SORTED DATA, SMALL SORT ") ; for I in INT_DATA'RANGE loop PUT(INT_DATA(I)); PUT(' '); PUT(FLT_DATA(I)); PUT(' '); PUT(STR_DATA(I)); PUT(' '); PUT(ENU_DATA(I)); PUT(' '); PUT(FIX_DATA(I)); NEW_LINE; end loop ; end GENERIC_SORT_DEMO_1 ;