with TEXT_IO; USE TEXT_IO; -- -- This program has many powerful features of Ada: generics, -- packages, procedures, private data types, attributes, -- enumeration types, and overloading in addition to: integers, -- floating point, strings, conatenation and multiple argument IO -- procedure NESTED_GENERICS is type MISSION is (BUILD_BRIDGE, LAUNCH_SHIP, SATELLITE, TEST_SYSTEM); I1,I2,I3 : INTEGER; F1,F2,F3 : FLOAT; M1,M2,M3 : MISSION; generic type ITEM is private; procedure EXCHANGE(I1,I2:in out ITEM); generic type THING is private; procedure SWITCH(A,B,C: in out THING); procedure EXCHANGE(I1,I2:in out ITEM) is T:ITEM; begin T:=I1;I1:=I2;I2:=T; end; procedure SWITCH(A,B,C: in out THING) is procedure SWAP is new EXCHANGE(THING); begin SWAP(A,B); SWAP(A,C); end SWITCH; package INT_IO is new INTEGER_IO(INTEGER); use INT_IO; package FLO_IO is new FLOAT_IO(FLOAT); use FLO_IO; package MISSION_IO is new ENUMERATION_IO(MISSION); use MISSION_IO; procedure CHANGE_EM is new SWITCH(INTEGER); -- integer swapper procedure CHANGE_EM is new SWITCH(FLOAT); -- float swapper procedure CHANGE_EM is new SWITCH(MISSION); -- mission swapper begin I1:=1;I2:=2;I3:=3; PUT(I1,10);PUT(I2,10);PUT(I3,10);NEW_LINE; CHANGE_EM(I1,I2,I3); -- try with integers PUT(I1,10);PUT(I2,10);PUT(I3,10);NEW_line; F1:=1.5;F2:=2.5;F3:=3.5; PUT(F1,10);PUT(F2,10);PUT(F3,10);NEW_LINE; CHANGE_EM(F1,F2,F3); -- floats PUT(F1,10);PUT(F2,10);PUT(F3,10);NEW_LINE; M1:=BUILD_BRIDGE;M2:=LAUNCH_SHIP;M3:=SATELLITE; PUT_LINE(MISSION'IMAGE(M1)&" "&MISSION'IMAGE(M2)&" "&MISSION'IMAGE(M3)); CHANGE_EM(M1,M2,M3); -- and missions PUT_LINE(MISSION'IMAGE(M1)&" "&MISSION'IMAGE(M2)&" "&MISSION'IMAGE(M3)); end NESTED_GENERICS ;