home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / adav313.zip / gnat-3_13p-os2-bin-20010916.zip / emx / gnat / examples / ex6_if.ads < prev    next >
Text File  |  2000-07-19  |  2KB  |  76 lines

  1. ---------------------------------- ex6_if.ads ---------------------------------
  2. with Interfaces.CPP;
  3. use  Interfaces.CPP;
  4. package ex6_if is
  5.  
  6.  
  7.    package A_Class is
  8.       --
  9.       --   Translation of C++ class A
  10.       --
  11.  
  12.       type A is tagged
  13.          record
  14.             O_Value : Integer;
  15.             A_Value : Integer;
  16.             Vptr : Interfaces.CPP.Vtable_Ptr;
  17.          end record;
  18.  
  19.       pragma CPP_Class (Entity => A);
  20.       pragma CPP_Vtable (Entity => A, Vtable_Ptr => Vptr, Entry_Count => 2);
  21.  
  22.       --   Member Functions
  23.  
  24.       procedure Non_Virtual (This : in A'Class);
  25.       pragma Import (CPP, Non_Virtual, "non_virtual_1A");
  26.  
  27.       procedure Overridden (This : in A);
  28.       pragma CPP_Virtual (Entity      => Overridden,      --  long form
  29.                           Vtable_Ptr  => Vptr,
  30.                           Entry_Count => 1);
  31.       pragma Import (CPP, Overridden, "overridden__1A");
  32.  
  33.       procedure Not_Overridden (This : in A);
  34.       pragma CPP_Virtual (Not_Overridden);                -- short form
  35.       pragma Import (CPP, Not_Overridden, "not_overridden__1A");
  36.  
  37.       function Constructor return A'Class;
  38.       pragma CPP_Constructor (Entity => Constructor);
  39.       pragma Import (CPP, Constructor, "__1A");
  40.  
  41.    end A_Class;
  42.  
  43.    package B_Class is
  44.  
  45.       type B is new A_Class.A with
  46.          record
  47.             B_Value : Integer;
  48.          end record;
  49.  
  50.       pragma CPP_Class (Entity => B);
  51.       pragma CPP_Vtable (Entity => B, Vtable_Ptr => Vptr, Entry_Count => 2);
  52.  
  53.       function Constructor return B'Class;
  54.       pragma CPP_Constructor (Entity => Constructor);
  55.       pragma Import (CPP, Constructor, "__1B");
  56.  
  57.       procedure Overridden (This : in B);
  58.       pragma CPP_Virtual (Overridden, Vptr, 1);
  59.       pragma Import (CPP, Overridden, "overridden__1B");
  60.  
  61.    end B_Class;
  62.  
  63.    package Ada_Extension is
  64.  
  65.       type C is new B_Class.B with
  66.          record
  67.             C_Value : Integer := 3030;
  68.          end record;
  69.  
  70.       --  no more pragma CPP_Class, CPP_Vtable; or CPP_Virtual:
  71.       --  this is a regular Ada tagged type
  72.  
  73.       procedure Overridden (This : in C);
  74.    end Ada_Extension;
  75. end Ex6_If;
  76.