hkClassMember.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_MEMBER_H
  9. #define HK_BASE_CLASS_MEMBER_H
  10. class hkClassEnum;
  11. class hkClass;
  12. class hkCustomAttributes;
  13. /// hkClassMember meta information
  14. extern const hkClass hkClassMemberClass;
  15. /// Reflection information for a data member of a type.
  16. class hkClassMember
  17. {
  18. public:
  19. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_HKCLASS, hkClassMember);
  20. HK_DECLARE_REFLECTION();
  21. // Be careful when adding types to this enum.
  22. // Maintain this order:
  23. // Sort first by type (integer, float, ...)
  24. // next by size. (int32, uint32, int64, ...)
  25. /// An enumeration of all possible member types.
  26. /// There are three basic categories. Plain old data types
  27. /// (normal and c-style array variants), enums and hkArrays.
  28. enum Type
  29. {
  30. /// No type
  31. TYPE_VOID = 0,
  32. /// hkBool,  boolean type
  33. TYPE_BOOL,
  34. /// hkChar, signed char type
  35. TYPE_CHAR,
  36. /// hkInt8, 8 bit signed integer type
  37. TYPE_INT8,
  38. /// hkUint8, 8 bit unsigned integer type
  39. TYPE_UINT8,
  40. /// hkInt16, 16 bit signed integer type
  41. TYPE_INT16,
  42. /// hkUint16, 16 bit unsigned integer type
  43. TYPE_UINT16,
  44. /// hkInt32, 32 bit signed integer type
  45. TYPE_INT32,
  46. /// hkUint32, 32 bit unsigned integer type
  47. TYPE_UINT32,
  48. /// hkInt64, 64 bit signed integer type
  49. TYPE_INT64,
  50. /// hkUint64, 64 bit unsigned integer type
  51. TYPE_UINT64,
  52. /// hkReal, float type
  53. TYPE_REAL,
  54. /// hkVector4 type
  55. TYPE_VECTOR4,
  56. /// hkQuaternion type
  57. TYPE_QUATERNION,
  58. /// hkMatrix3 type
  59. TYPE_MATRIX3,
  60. /// hkRotation type
  61. TYPE_ROTATION,
  62. /// hkQsTransform type
  63. TYPE_QSTRANSFORM,
  64. /// hkMatrix4 type
  65. TYPE_MATRIX4,
  66. /// hkTransform type
  67. TYPE_TRANSFORM,
  68. /// Serialize as zero - deprecated.
  69. TYPE_ZERO,
  70. /// Generic pointer, see member flags for more info
  71. TYPE_POINTER,
  72. /// Function pointer
  73. TYPE_FUNCTIONPOINTER,
  74. /// hkArray<T>, array of items of type T
  75. TYPE_ARRAY,
  76. /// hkInplaceArray<T,N> or hkInplaceArrayAligned16<T,N>, array of N items of type T
  77. TYPE_INPLACEARRAY,
  78. /// hkEnum<ENUM,STORAGE> - enumerated values
  79. TYPE_ENUM,
  80. /// Object
  81. TYPE_STRUCT,
  82. /// Simple array (ptr(typed) and size only)
  83. TYPE_SIMPLEARRAY,
  84. /// Simple array of homogeneous types, so is a class id followed by a void* ptr and size
  85. TYPE_HOMOGENEOUSARRAY,
  86. /// hkVariant (void* and hkClass*) type
  87. TYPE_VARIANT,
  88. /// char*, null terminated string
  89. TYPE_CSTRING,
  90. /// hkUlong, unsigned long, defined to always be the same size as a pointer
  91. TYPE_ULONG,
  92. /// hkFlags<ENUM,STORAGE> - 8,16,32 bits of named values.
  93. TYPE_FLAGS,
  94. TYPE_MAX
  95. };
  96. /// Special member properties.
  97. enum FlagValues
  98. {
  99. FLAGS_NONE = 0,
  100. /// Member has forced 8 byte alignment.
  101. ALIGN_8 = 128,
  102. /// Member has forced 16 byte alignment.
  103.             ALIGN_16 = 256,
  104.                 /// The members memory contents is not owned by this object
  105.             NOT_OWNED = 512,
  106.                 /// This member should not be written when serializing
  107.             SERIALIZE_IGNORED = 1024
  108. };
  109. typedef hkFlags<FlagValues, hkUint16> Flags;
  110. enum DeprecatedFlagValues
  111. {
  112. DEPRECATED_SIZE_8 = 8,
  113. DEPRECATED_ENUM_8 = 8,
  114. DEPRECATED_SIZE_16 = 16,
  115. DEPRECATED_ENUM_16 = 16,
  116. DEPRECATED_SIZE_32 = 32,
  117. DEPRECATED_ENUM_32 = 32
  118. };
  119. /// Get the name of the member.
  120. inline const char* getName() const;
  121. /// Get the primary type of the member.
  122. inline hkClassMember::Type getType() const;
  123. /// Set the primary type of the member.
  124. inline void setType(hkClassMember::Type type);
  125. /// Get the secondary type of the member.
  126. inline hkClassMember::Type getSubType() const;
  127. /// Set the secondary type of the member.
  128. inline void setSubType(hkClassMember::Type subtype);
  129. hkClassMember::Type getArrayType() const;
  130. /// Return the size of this member in bytes.
  131. /// Note that for c style arrays this the size of
  132. /// a single item times the number of items.
  133. int getSizeInBytes() const;
  134. /// Get the alignment of this type in bytes.
  135. int getAlignment() const;
  136.             /// Return true if the memory of the member does not belong to this object
  137.         hkBool isNotOwner() const;
  138. /// Get the full declared type of the member.
  139. /// e.g. hkArray<hkUint32>. Writes at most bufLen chars
  140. /// into buf. Returns the length of the name.
  141. int getTypeName(char* buf, int bufLen) const;
  142. /// For arrays, the size of the contained elements.
  143. int getArrayMemberSize() const;
  144. /// Check if the member has an associated class pointer
  145. inline hkBool hasClass() const;
  146. /// For struct types or arrays of structs.
  147. const hkClass& getStructClass() const;
  148. /// Optional extra type information for structs, pointers etc.
  149. const hkClass* getClass() const;
  150. /// Check if the member has an associated enum class pointer
  151. inline hkBool hasEnumClass() const;
  152. ///For struct types or arrays of structs.
  153. const hkClassEnum& getEnumClass() const;
  154. /// If this member is a c-style array, return its size, otherwise return zero.
  155. /// This is not valid for hkTypeArray nor hkTypeEnum.
  156. int getCstyleArraySize() const;
  157. /// For enum members, access its corresponding hkClassEnum.
  158. const hkClassEnum& getEnumType() const;
  159. /// Get the enum value.
  160. int getEnumValue(const void* memberAddress) const;
  161. /// Get the enum value.
  162. void setEnumValue(void* memberAddress, int value) const;
  163. /// The offset of this member from the start of the object.
  164. inline int getOffset() const;
  165. /// The offset of this member from the start of the object.
  166. inline void setOffset(int offset);
  167. /// See the Flags enum for a description of flags.
  168. inline const Flags& getFlags() const;
  169. /// See the Flags enum for a description of flags.
  170. inline Flags& getFlags();
  171. /// Query this member for a named attribute.
  172. const hkVariant* getAttribute(const char* id) const;
  173. /// Return the enumerated value of 'name'. e.g. "hkReal" -> hkClassMember::TYPE_REAL
  174. static hkClassMember::Type HK_CALL getTypeOf( const char* name );
  175. /// Return the subtype of name 'name'. e.g. "hkArray<hkInt32>" -> hkClassMember::TYPE_INT32
  176. static hkClassMember::Type HK_CALL getSubtypeOf( const char* name );
  177. /// Properties of the builtin types.
  178. struct TypeProperties
  179. {
  180. /// The type associated with this
  181. hkEnum<hkClassMember::Type,hkUint8> m_type;
  182. /// Zero terminated name
  183. const char* m_name;
  184. /// Size of the type in bytes <=0 it is not defined
  185. short m_size;
  186. /// Alignment in bytes, if <=0 it is not defined
  187. short m_align;
  188. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_BASE_CLASS, hkClassMember::TypeProperties );
  189. };
  190.             /// Return details about the class member type
  191.         static const struct TypeProperties& HK_CALL getClassMemberTypeProperties(Type type);
  192. private:
  193. /// The name of this member.
  194. const char* m_name;
  195. ///
  196. const hkClass* m_class; //
  197. const hkClassEnum* m_enum; // Usually null except for enums
  198. hkEnum<Type,hkUint8> m_type; // An hkMemberType.
  199. hkEnum<Type,hkUint8> m_subtype; // An hkMemberType.
  200. hkInt16 m_cArraySize; // Usually zero, nonzero for cstyle array..
  201. Flags m_flags; // Pointers:optional, voidstar, rawdata. Enums:sizeinbytes.
  202. hkUint16 m_offset; // Address offset from start of struct.
  203. const hkCustomAttributes* m_attributes; //+serialized(false)
  204. };
  205. #include <Common/Base/Reflection/hkClassMember.inl>
  206. #endif // HK_BASE_CLASS_MEMBER_H
  207. /*
  208. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  209. * Confidential Information of Havok.  (C) Copyright 1999-2009
  210. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  211. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  212. * rights, and intellectual property rights in the Havok software remain in
  213. * Havok and/or its suppliers.
  214. * Use of this software for evaluation purposes is subject to and indicates
  215. * acceptance of the End User licence Agreement for this product. A copy of
  216. * the license is included with this software and is also available at www.havok.com/tryhavok.
  217. */