home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / Found / FWRunTyp / FWClaPrv.h < prev    next >
Encoding:
Text File  |  1996-09-17  |  3.7 KB  |  112 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWClaPrv.h
  4. //    Release Version:    $ ODF 2 $
  5. //
  6. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #ifndef FWCLAPRV_H
  11. #define FWCLAPRV_H
  12.  
  13. // ----- ODF RTTI private macros.
  14. //       Clients should use the public RTTI macros defined in FWClaInf.h
  15.  
  16. #define FW_CLASS_INFO_PTR(name) \
  17.     (&name::fgClassInfo)
  18.  
  19. #define _FW_CLASS_ANCESTORS(name) \
  20.     name::fgAncestors
  21.         
  22. #define _FW_CLASS_OFFSETS(name) \
  23.     name::fgAncestorOffsets
  24.         
  25. const unsigned long FW_kDummyAddress = 1024;
  26. #define _FW_BASE_OFFSET(derived, base)    \
  27.     (((char*)((base*)((derived*)FW_kDummyAddress))) - (char*)FW_kDummyAddress)
  28.  
  29.  
  30. #define _FW_DEFINE_CLASSINFO_OBJECT(name)                                             \
  31.     FW_SClassInfo                                                \
  32.         name::fgClassInfo = { #name, sizeof(name), _FW_CLASS_ANCESTORS(name), _FW_CLASS_OFFSETS(name) };
  33.  
  34. #define _FW_CLASS_ANCESTORS_IMPLEMENT_M0(name)                                             \
  35.     const FW_SClassInfoPtr _FW_CLASS_ANCESTORS(name)[] =                \
  36.     {                                                                                    \
  37.         0                                                                                \
  38.     };                                                                                    \
  39.     const size_t _FW_CLASS_OFFSETS(name)[] =                                \
  40.     {                                                                                    \
  41.         0                                                                                \
  42.     };
  43.  
  44. #define _FW_CLASS_ANCESTORS_IMPLEMENT_M1(name, ancestor)                                \
  45.     const FW_SClassInfoPtr _FW_CLASS_ANCESTORS(name)[] =                \
  46.     {                                                                                    \
  47.         FW_CLASS_INFO_PTR(ancestor),                                                    \
  48.         0                                                                                \
  49.     };                                                                                    \
  50.     const size_t _FW_CLASS_OFFSETS(name)[] =                                \
  51.     {                                                                                    \
  52.         _FW_BASE_OFFSET(name, ancestor),                                                \
  53.         0                                                                                \
  54.     };
  55.  
  56. #define _FW_CLASS_ANCESTORS_IMPLEMENT_M2(name, ancestor1, ancestor2)                    \
  57.     const FW_SClassInfoPtr _FW_CLASS_ANCESTORS(name)[] =                \
  58.     {                                                                                    \
  59.         FW_CLASS_INFO_PTR(ancestor1),                                                    \
  60.         FW_CLASS_INFO_PTR(ancestor2),                                                    \
  61.         0                                                                                \
  62.     };                                                                                    \
  63.     const size_t _FW_CLASS_OFFSETS(name)[] =                                \
  64.     {                                                                                    \
  65.         _FW_BASE_OFFSET(name, ancestor1),                                                \
  66.         _FW_BASE_OFFSET(name, ancestor2),                                                \
  67.         0                                                                                \
  68.     };
  69.  
  70.  
  71. #define _FW_CLASS_ANCESTORS_IMPLEMENT_M3(name, ancestor1, ancestor2, ancestor3)            \
  72.     const FW_SClassInfoPtr _FW_CLASS_ANCESTORS(name)[] =                \
  73.     {                                                                                    \
  74.         FW_CLASS_INFO_PTR(ancestor1),                                                    \
  75.         FW_CLASS_INFO_PTR(ancestor2),                                                    \
  76.         FW_CLASS_INFO_PTR(ancestor3),                                                    \
  77.         0                                                                                \
  78.     };                                                                                    \
  79.     const size_t _FW_CLASS_OFFSETS(name)[] =                                \
  80.     {                                                                                    \
  81.         _FW_BASE_OFFSET(name, ancestor1),                                                \
  82.         _FW_BASE_OFFSET(name, ancestor2),                                                \
  83.         _FW_BASE_OFFSET(name, ancestor3),                                                \
  84.         0                                                                                \
  85.     };
  86.  
  87. #define _FW_CLASS_ANCESTORS_IMPLEMENT_M4(name, ancestor1, ancestor2, ancestor3, ancestor4)\
  88.     const FW_SClassInfoPtr _FW_CLASS_ANCESTORS(name)[] =                \
  89.     {                                                                                    \
  90.         FW_CLASS_INFO_PTR(ancestor1),                                                    \
  91.         FW_CLASS_INFO_PTR(ancestor2),                                                    \
  92.         FW_CLASS_INFO_PTR(ancestor3),                                                    \
  93.         FW_CLASS_INFO_PTR(ancestor4),                                                    \
  94.         0                                                                                \
  95.     };                                                                                    \
  96.     const size_t _FW_CLASS_OFFSETS(name)[] =                                \
  97.     {                                                                                    \
  98.         _FW_BASE_OFFSET(name, ancestor1),                                                \
  99.         _FW_BASE_OFFSET(name, ancestor2),                                                \
  100.         _FW_BASE_OFFSET(name, ancestor3),                                                \
  101.         _FW_BASE_OFFSET(name, ancestor4),                                                \
  102.         0                                                                                \
  103.     };
  104.  
  105. #define _FW_CLASSINFO_ACCESSOR_MEMBERS(name)                                            \
  106.     FW_SClassInfoPtr name::PrivVirtualGetClassInfo(void) const                            \
  107.     {                                                                                    \
  108.         return FW_CLASS_INFO_PTR(name);                                                \
  109.     }
  110.  
  111. #endif
  112.