home *** CD-ROM | disk | FTP | other *** search
/ Chip 1995 March / CHIP3.mdf / programm / prog4 / accesgen.ada < prev    next >
Encoding:
Text File  |  1991-07-01  |  2.3 KB  |  98 lines

  1.                                    -- Chapter 28 - Program 5
  2. generic
  3.    type ACCESS_INT is access INTEGER;
  4. procedure Swap_Int_Data(Dat1, Dat2 : ACCESS_INT);
  5.  
  6.  
  7.  
  8. procedure Swap_Int_Data(Dat1, Dat2 : ACCESS_INT) is
  9. Temp : ACCESS_INT := new INTEGER;
  10. begin
  11.    Temp.all := Dat1.all;
  12.    Dat1.all := Dat2.all;
  13.    Dat2.all := Temp.all;
  14. end Swap_Int_Data;
  15.  
  16.  
  17.  
  18.  
  19. generic
  20.    type ANY_TYPE is private;
  21.    type ACCESS_ANY is access ANY_TYPE;
  22. procedure Swap_Any_Data(Dat1, Dat2 : ACCESS_ANY);
  23.  
  24.  
  25.  
  26. procedure Swap_Any_Data(Dat1, Dat2 : ACCESS_ANY) is
  27. Temp : ACCESS_ANY := new ANY_TYPE;
  28. begin
  29.    Temp.all := Dat1.all;
  30.    Dat1.all := Dat2.all;
  31.    Dat2.all := Temp.all;
  32. end Swap_Any_Data;
  33.  
  34.  
  35.  
  36.  
  37. with Text_IO, Swap_Int_Data, Swap_Any_Data;
  38. use Text_IO;
  39.  
  40. procedure AccesGen is
  41.  
  42. type ACCESS_INT is access INTEGER;
  43. Address1, Address2 : ACCESS_INT := new INTEGER;
  44.  
  45. procedure Transpose_Integers is new Swap_Int_Data(ACCESS_INT);
  46.  
  47. type NAME_ARRAY is array(1..6) of CHARACTER;
  48.  
  49. type PERSONAL_STUFF is
  50.    record
  51.       Age : INTEGER;
  52.       Grade : INTEGER;
  53.       Name  : NAME_ARRAY;
  54.    end record;
  55.  
  56. type PERSONAL_ACCESS is access PERSONAL_STUFF;
  57. Male_Student : PERSONAL_ACCESS := new PERSONAL_STUFF;
  58. Female_Student : PERSONAL_ACCESS := new PERSONAL_STUFF;
  59.  
  60. type ACCESS_FLOAT is access FLOAT;
  61. Address_Float1 : ACCESS_FLOAT;
  62. Address_Float2 : ACCESS_FLOAT;
  63.  
  64. procedure Transpose_Floats is new Swap_Any_Data(FLOAT,
  65.                                                      ACCESS_FLOAT);
  66. procedure Transpose_Records is new Swap_Any_Data(PERSONAL_STUFF,
  67.                                                   PERSONAL_ACCESS);
  68. procedure Transpose_Ints is new Swap_Any_Data(INTEGER, ACCESS_INT);
  69.  
  70. begin
  71.  
  72.    Put_Line("Begin the generic access routine");
  73.  
  74.    Address1.all := 23;
  75.    Address2.all := 13 * Address1.all;
  76.    Transpose_Integers(Address1, Address2);
  77.    Transpose_Ints(Address1, Address2);
  78.  
  79.    Address_Float1 := new FLOAT;
  80.    Address_Float2 := new FLOAT;
  81.    Address_Float1.all := 3.141592;
  82.    Address_Float2.all := 144.0;
  83.    Transpose_Floats(Address_Float1, Address_Float2);
  84.  
  85.    Male_Student.all := (16, 11, "Johnny");
  86.    Female_Student.all := (15, 11, "Sandy ");
  87.    Transpose_Records(Male_Student, Female_Student);
  88.  
  89. end Accesgen;
  90.  
  91.  
  92.  
  93.  
  94. -- Result of execution
  95.  
  96. -- Begin the generic access routine
  97.  
  98.