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

其他游戏

开发平台:

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_CLASS_H
  9. #define HK_BASE_CLASS_H
  10. #include <Common/Base/Reflection/hkClassMember.h>
  11. #include <Common/Base/Reflection/hkClassEnum.h>
  12. class hkClassEnum;
  13. class hkClassMember;
  14. class hkCustomAttributes;
  15. class hkStreamWriter;
  16. class hkTypedUnion;
  17. template <typename K, typename V> class hkPointerMap;
  18. extern const hkClass hkClassClass;
  19. /// Reflection information for any reflected type.
  20. /// Reflection is based upon the Java object model where any
  21. /// class has exactly zero or one parents and may implement
  22. /// zero or more interfaces. An interface is a class which 
  23. /// has virtual methods but no data members.
  24. class hkClass
  25. {
  26. public:
  27. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_HKCLASS, hkClass );
  28. HK_DECLARE_REFLECTION();
  29. public:
  30. enum SignatureFlags
  31. {
  32. SIGNATURE_LOCAL = 1 // don't include signature of parents
  33. };
  34. enum FlagValues
  35. {
  36. FLAGS_NONE = 0,
  37. FLAGS_NOT_SERIALIZABLE = 1
  38. };
  39. typedef hkFlags<FlagValues, hkUint32> Flags;
  40. /// Create a class.
  41. hkClass(const char* className,
  42. const hkClass* parentClass,
  43. int objectSizeInBytes,
  44. const hkClass** implementedInterfaces,
  45. int numImplementedInterfaces,
  46. const hkClassEnum* declaredEnums,
  47. int numDeclaredEnums,
  48. const hkClassMember* declaredMembers,
  49. int numDeclaredMembers,
  50. const void* defaults = HK_NULL,
  51. const hkCustomAttributes* attributes = HK_NULL,
  52. hkUint32 flags = 0,
  53. hkUint32 version = 0);
  54. /// Get the name of this class. String is valid for the lifetime of this class.
  55. const char* getName() const;
  56. /* class methods */
  57. /// Return parent of this class or HK_NULL if we are a toplevel class.
  58. const hkClass* getParent() const;
  59. /// Return parent of this class or HK_NULL if we are a toplevel class.
  60. hkClass* getParent();
  61. /// Return number of classes to the top of inheritance hierarchy.
  62. /// A class with no parents has a depth of one. Interfaces are not counted.
  63. int getInheritanceDepth() const;
  64. /// Are we a parent class of class k.
  65. hkBool isSuperClass(const hkClass& k) const;
  66. /// Get the i'th implemented interface (including parents).
  67. const hkClass* getInterface( int i ) const;
  68. /// Get the number of interfaces this class implements (including parents).
  69. int getNumInterfaces() const;
  70. /// Get the i'th implemented interface. (not including parents)
  71. const hkClass* getDeclaredInterface( int i ) const;
  72. /// Get the number of interfaces this class implements. (not including parents)
  73. int getNumDeclaredInterfaces() const;
  74. /// Get the i'th enum defined in this class and parents.
  75. const hkClassEnum& getEnum(int i) const;
  76. /// Get the enum named 'name' or HK_NULL if not found.
  77. const hkClassEnum* getEnumByName(const char* name) const;
  78. /// Get the number of enums defined in this class and parents.
  79. int getNumEnums() const;
  80. /// Get the i'th enum defined in this class (not including parent class members).
  81. const hkClassEnum& getDeclaredEnum(int i) const;
  82. /// Get the declared enum named 'name' or HK_NULL if not found.
  83. const hkClassEnum* getDeclaredEnumByName(const char* name) const;
  84. /// Get the number of enums defined in this class (not including parent class members).
  85. int getNumDeclaredEnums() const;
  86. /// Get the i'th member (including parent class members).
  87. const hkClassMember& getMember(int i) const;
  88. /// Get the i'th member (including parent class members).
  89. hkClassMember& getMember(int i);
  90. /// Get the member named 'name' or HK_NULL if not found.
  91. const hkClassMember* getMemberByName(const char* name) const;
  92. /// Get the index of member named 'name' or -1 if not found.
  93. int getMemberIndexByName(const char* name) const;
  94. /// Get the number of members in this class (including parent class members).
  95. int getNumMembers() const;
  96. /// Get the i'th member declared in this class (not including parent class members).
  97. const hkClassMember& getDeclaredMember(int i) const;
  98. /// Get the declared member named 'name' or HK_NULL if not found.
  99. const hkClassMember* getDeclaredMemberByName(const char* name) const;
  100. /// Get the index of declared member named 'name' or -1 if not found.
  101. int getDeclaredMemberIndexByName(const char* name) const;
  102. /// Get the number of members declared in this class (not including parent class members).
  103. int getNumDeclaredMembers() const;
  104. /// Get the size required for instances of this class.
  105. int getObjectSize() const;
  106. /// Set the size required for instances of this class.
  107. void setObjectSize(int size);
  108. /// Does this class have a vtable?
  109. hkBool hasVtable() const;
  110. /// Does the given member have a default?
  111. hkBool32 hasDefault(int memberIndex) const;
  112. /// Does the given declared member have a default?
  113. hkBool32 hasDeclaredDefault(int declaredIndex) const;
  114. /// Write the default of the given member into w and return HK_SUCCESS.
  115. /// If there is no default do not write anything and return HK_FAILURE.
  116. hkResult getDefault(int memberIndex, hkStreamWriter* w) const;
  117. /// Write the default of the given declared member into w and return HK_SUCCESS.
  118. /// If there is no default do not write anything and return HK_FAILURE.
  119. hkResult getDeclaredDefault(int declaredIndex, hkStreamWriter* w) const;
  120. /// Put the default of the given member into value and return HK_SUCCESS.
  121. /// If there is no default don't do anything and return HK_FAILURE.
  122. hkResult getDefault(int memberIndex, hkTypedUnion& value) const;
  123. /// Put the default of the given declared member into value and return HK_SUCCESS.
  124. /// If there is no default don't do anything and return HK_FAILURE.
  125. hkResult getDeclaredDefault(int declaredIndex, hkTypedUnion& value) const;
  126. /// Get the class signature for versioning.
  127. hkUint32 getSignature(int signatureFlags = 0) const;
  128. /// Gets the described version of this class
  129. int getDescribedVersion() const;
  130. /// Get the class signature for versioning.
  131. void writeSignature( hkStreamWriter* w ) const;
  132. /// Query for a class attribute.
  133. const hkVariant* getAttribute(const char* id) const;
  134. /// See the Flags enum for a description of flags.
  135. const Flags& getFlags() const;
  136. /// See the Flags enum for a description of flags.
  137. Flags& getFlags();
  138. typedef hkPointerMap<const hkClass*, hkInt32> UpdateFlagFromClassMap;
  139. static void HK_CALL updateMetadataInplace( hkClass** c, int sourceVersion );
  140. static void HK_CALL updateMetadataInplace( hkClass* c, UpdateFlagFromClassMap& updatedAlready, int sourceVersion );
  141. private:
  142. hkResult retrieveMember(int memberIndex, const void*& defaultOut, const hkClassMember*& memberOut) const;
  143. protected:
  144. /// Name of this type.
  145. const char* m_name;
  146. /// Parent class.
  147. const hkClass* m_parent;
  148. /// Size of the live instance.
  149. int m_objectSize;
  150. /// Interfaces implemented by this class.
  151. //const hkClass** m_implementedInterfaces;
  152. /// Number of interfaces implemented by this class.
  153. int m_numImplementedInterfaces;
  154. /// Declared enum members.
  155. const class hkClassEnum* m_declaredEnums;
  156. /// Number of enums declared in this class.
  157. int m_numDeclaredEnums;
  158. /// Declared members.
  159. const class hkClassMember* m_declaredMembers;
  160. /// Number of members declared in this class.
  161. int m_numDeclaredMembers;
  162. /// Default values for this class.
  163. const void* m_defaults; //+nosave
  164. /// Default values for this class.
  165. const hkCustomAttributes* m_attributes; //+serialized(false)
  166.             /// Flag values.
  167. Flags m_flags;
  168. /// Version of described object.
  169. int m_describedVersion;
  170. };
  171. #endif // HK_BASE_CLASS_H
  172. /*
  173. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  174. * Confidential Information of Havok.  (C) Copyright 1999-2009
  175. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  176. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  177. * rights, and intellectual property rights in the Havok software remain in
  178. * Havok and/or its suppliers.
  179. * Use of this software for evaluation purposes is subject to and indicates
  180. * acceptance of the End User licence Agreement for this product. A copy of
  181. * the license is included with this software and is also available at www.havok.com/tryhavok.
  182. */