hkTypeInfo.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:6k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef HK_BASE_TYPE_INFO_H
  9. #define HK_BASE_TYPE_INFO_H
  10. class hkClass;
  11. class hkTypeInfo
  12. {
  13. public:
  14. typedef void (HK_CALL *FinishLoadedObjectFunction)(void*, int);
  15. typedef void (HK_CALL *CleanupLoadedObjectFunction)(void*);
  16. hkTypeInfo( const char* name,
  17. FinishLoadedObjectFunction finish,
  18. CleanupLoadedObjectFunction cleanup,
  19. const void* vtable )
  20. :   m_typeName(name),
  21. m_finishLoadedObjectFunction(finish),
  22. m_cleanupLoadedObjectFunction(cleanup),
  23. m_vtable(vtable)
  24. {
  25. }
  26. const char* getTypeName() const
  27. {
  28. return m_typeName;
  29. }
  30. const void* getVtable() const
  31. {
  32. return m_vtable;
  33. }
  34. FinishLoadedObjectFunction getFinishFunction() const
  35. {
  36. return m_finishLoadedObjectFunction;
  37. }
  38. CleanupLoadedObjectFunction getCleanupFunction() const
  39. {
  40. return m_cleanupLoadedObjectFunction;
  41. }
  42. private:
  43. const char* m_typeName;
  44. FinishLoadedObjectFunction m_finishLoadedObjectFunction;
  45. CleanupLoadedObjectFunction m_cleanupLoadedObjectFunction;
  46. const void* m_vtable;
  47. };
  48. //
  49. // Internal definitions, used by public macros later in the file.
  50. //
  51. #define HK_REFLECTION_DEFINE_COMMON( TEXT_CLASS, SCOPED_CPP_CLASS, FINISH, CLEANUP, VTABLE ) 
  52. const hkClass& HK_CALL SCOPED_CPP_CLASS::staticClass() { return TEXT_CLASS##Class; } 
  53. extern const hkTypeInfo TEXT_CLASS##TypeInfo; 
  54. const hkTypeInfo TEXT_CLASS##TypeInfo( #TEXT_CLASS, FINISH, CLEANUP, VTABLE )
  55. #define HK_REFLECTION_DEFINE_INTERNAL_FINISH( TEXT_CLASS, SCOPED_CPP_CLASS, CPP_CLASS ) 
  56. static void HK_CALL finishLoadedObject##TEXT_CLASS(void* p, int finishing = 1) 
  57. hkFinishLoadedObjectFlag f; f.m_finishing = finishing; 
  58. new (p) SCOPED_CPP_CLASS(f); 
  59. }
  60. #define HK_REFLECTION_DEFINE_INTERNAL_CLEANUP( TEXT_CLASS, SCOPED_CPP_CLASS, CPP_CLASS ) 
  61. static void HK_CALL cleanupLoadedObject##TEXT_CLASS(void* p) 
  62. static_cast<SCOPED_CPP_CLASS*>(p)->~CPP_CLASS(); 
  63. }
  64. #define HK_REFLECTION_DEFINE_INTERNAL_VTABLE( TEXT_CLASS, SCOPED_CPP_CLASS, CPP_CLASS ) 
  65. static const void* HK_CALL getVtable##TEXT_CLASS() 
  66. union { HK_ALIGN16(void* ptr); char buf[sizeof(SCOPED_CPP_CLASS)]; } u; 
  67. hkFinishLoadedObjectFlag f; 
  68. new (u.buf) SCOPED_CPP_CLASS(f); 
  69. return u.ptr; 
  70. }
  71. #define HK_REFLECTION_DEFINE_INTERNAL_VIRTUAL( TEXT_CLASS, SCOPED_CPP_CLASS, CPP_CLASS ) 
  72. HK_REFLECTION_DEFINE_INTERNAL_FINISH( TEXT_CLASS, SCOPED_CPP_CLASS, CPP_CLASS ) 
  73. HK_REFLECTION_DEFINE_INTERNAL_CLEANUP( TEXT_CLASS, SCOPED_CPP_CLASS, CPP_CLASS ) 
  74. HK_REFLECTION_DEFINE_INTERNAL_VTABLE( TEXT_CLASS, SCOPED_CPP_CLASS, CPP_CLASS ) 
  75. HK_REFLECTION_DEFINE_COMMON( TEXT_CLASS, SCOPED_CPP_CLASS, finishLoadedObject##TEXT_CLASS, cleanupLoadedObject##TEXT_CLASS, getVtable##TEXT_CLASS() )
  76. #define HK_REFLECTION_DEFINE_INTERNAL_NONVIRTUAL( TEXT_CLASS, SCOPED_CPP_CLASS, CPP_CLASS ) 
  77. HK_REFLECTION_DEFINE_INTERNAL_FINISH( TEXT_CLASS, SCOPED_CPP_CLASS, CPP_CLASS ) 
  78. HK_REFLECTION_DEFINE_INTERNAL_CLEANUP( TEXT_CLASS, SCOPED_CPP_CLASS, CPP_CLASS ) 
  79. HK_REFLECTION_DEFINE_COMMON( TEXT_CLASS, SCOPED_CPP_CLASS, finishLoadedObject##TEXT_CLASS, cleanupLoadedObject##TEXT_CLASS, HK_NULL )
  80. #define HK_REFLECTION_DEFINE_INTERNAL_SIMPLE( TEXT_CLASS, SCOPED_CPP_CLASS, CPP_CLASS ) 
  81. HK_REFLECTION_DEFINE_INTERNAL_CLEANUP( TEXT_CLASS, SCOPED_CPP_CLASS, CPP_CLASS ) 
  82. HK_REFLECTION_DEFINE_COMMON( TEXT_CLASS, SCOPED_CPP_CLASS, HK_NULL, cleanupLoadedObject##TEXT_CLASS, HK_NULL )
  83. //
  84. // Public macro definitions
  85. //
  86. /// Define an hkTypeInfo for a class which is virtual.
  87. #define HK_REFLECTION_DEFINE_VIRTUAL(KLASS) 
  88. HK_REFLECTION_DEFINE_INTERNAL_VIRTUAL( KLASS, KLASS, KLASS )
  89. /// Define an hkTypeInfo for a class which is virtual.
  90. #define HK_REFLECTION_DEFINE_SCOPED_VIRTUAL(SCOPE, KLASS) 
  91. HK_REFLECTION_DEFINE_INTERNAL_VIRTUAL( SCOPE##KLASS, SCOPE::KLASS, KLASS )
  92. /// Define an hkTypeInfo for a non-virtual class. The vtable member will be set to null.
  93. #define HK_REFLECTION_DEFINE_NONVIRTUAL(KLASS) 
  94. HK_REFLECTION_DEFINE_INTERNAL_NONVIRTUAL( KLASS, KLASS, KLASS )
  95. /// Define an hkTypeInfo for a non-virtual class. The vtable member will be set to null.
  96. #define HK_REFLECTION_DEFINE_SCOPED_NONVIRTUAL(SCOPE, KLASS) 
  97. HK_REFLECTION_DEFINE_INTERNAL_NONVIRTUAL( SCOPE##KLASS, SCOPE::KLASS, KLASS )
  98. /// Define an hkTypeInfo for a non-virtual class which has no constructor (for simple structures).
  99. #define HK_REFLECTION_DEFINE_SIMPLE(KLASS) 
  100. HK_REFLECTION_DEFINE_INTERNAL_SIMPLE( KLASS, KLASS, KLASS )
  101. /// Define an hkTypeInfo for a non-virtual class which has no constructor (for simple structures).
  102. #define HK_REFLECTION_DEFINE_SCOPED_SIMPLE(SCOPE, KLASS) 
  103. HK_REFLECTION_DEFINE_INTERNAL_SIMPLE( SCOPE##KLASS, SCOPE::KLASS, KLASS )
  104. /// Utility to define an empty stub hkClass instance.
  105. #define HK_REFLECTION_DEFINE_STUB_VIRTUAL_BASE(KLASS) 
  106.     const hkClass KLASS##Class(#KLASS, HK_NULL, sizeof(KLASS), HK_NULL, 0, HK_NULL, 0, HK_NULL, 0, HK_NULL, HK_NULL, 0);
  107. /// Utility to define an empty stub hkClass instance.
  108. #define HK_REFLECTION_DEFINE_STUB_VIRTUAL(KLASS, PARENT) 
  109.     const hkClass KLASS##Class(#KLASS, &PARENT##Class, sizeof(KLASS), HK_NULL, 0, HK_NULL, 0, HK_NULL, 0, HK_NULL, HK_NULL, 0);
  110. #endif // HK_BASE_TYPE_INFO_H
  111. /*
  112. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  113. * Confidential Information of Havok.  (C) Copyright 1999-2009
  114. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  115. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  116. * rights, and intellectual property rights in the Havok software remain in
  117. * Havok and/or its suppliers.
  118. * Use of this software for evaluation purposes is subject to and indicates
  119. * acceptance of the End User licence Agreement for this product. A copy of
  120. * the license is included with this software and is also available at www.havok.com/tryhavok.
  121. */