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

其他游戏

开发平台:

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_STATISTICS_COLLECTOR_UTIL_H
  9. #define HK_STATISTICS_COLLECTOR_UTIL_H
  10. #include <Common/Base/DebugUtil/StatisticsCollector/hkStatisticsCollector.h>
  11. #include <Common/Base/Reflection/hkClass.h>
  12. /// A utility class used for working out automatically 'calcContentStatistics' for classes. This is achieved by using the
  13. /// reflection information held with classes. The methods will automatically recurse down contained members of an object
  14. /// passed in finding out how much memory child classes use up.
  15. ///
  16. /// Sometimes you have a class who contains a pointer to another class, but dow
  17. class hkStatisticsCollectorUtil
  18. {
  19. public:
  20.         /// Uses the reflection information to write to the statistics collector the amount of memory that is being used
  21. /// getClassType on obj must return a type for the function to work
  22.         /// Passing obj as HK_NULL is valid and will return immediately
  23.     static void HK_CALL defaultCalcStatistics(const hkReferencedObject* obj, hkStatisticsCollector* collector);
  24.         /// Uses reflection to work out memory used. obj must be a pointer to a cls object.
  25. /// Passing obj as HK_NULL is valid and will return immediately
  26.     static void HK_CALL defaultCalcStatistics(const void* obj, const hkClass& cls, hkStatisticsCollector* collector);
  27.         /// Adds only the fields at this level.
  28.     static void HK_CALL addClassContents(const void* obj, const hkClass& cls, hkStatisticsCollector* collector);
  29.         /// Adds only the fields at this level and up the tree to the parent.
  30.     static void HK_CALL addClassContentsAll(const void* obj, const hkClass& cls,hkStatisticsCollector* collector);
  31.         /// Adds only the fields at this level and up the tree to the parent.
  32. static void HK_CALL addClassContentsAll(const hkReferencedObject* obj, hkStatisticsCollector* collector);
  33.         /// Returns true if the class or any of its parent classes contains any members
  34.     static hkBool HK_CALL hasContents(const hkClass& cls);
  35. /// Returns true if the member type does not allocate any extra memory
  36. static hkBool HK_CALL isMemberSimple(const hkClassMember& mem);
  37. /// Returns true if a class cannot allocate any extra memory
  38. static hkBool HK_CALL isClassSimple(const hkClass& clsIn);
  39. protected:
  40. /// The in pointer must be an hkReferencedObject pointer
  41.     //static const hkClass* _getClass(void* in);
  42. static hkBool _isClassSimple(const hkClass& clsIn);
  43.     static void _addObjectContents(const char* fieldName, const void* obj, const hkClass& cls, hkStatisticsCollector* collector);
  44.     static void _addArrayContents(const hkClassMember& mem, void* data, int size, hkStatisticsCollector* collector);
  45.     static void _addHomogeneousArrayContents(const char* fieldName, const hkClass& cls, void* data, int size, hkStatisticsCollector* collector);
  46.     static void _addArrayData( const char* fieldName, void* data, int size, int capacity, int objSize, hkStatisticsCollector* collector);
  47.     static int _getArrayElementSize(const hkClassMember& mem);
  48.     static void _addObject(const char* fieldName, const void* obj, const hkClass& cls, hkStatisticsCollector* collector);
  49.     static void _addCstring(const hkClassMember& mem, char* string, hkStatisticsCollector* collector);
  50. //static void _addChildObjectContents(const char* fieldName, void* obj, const hkClass& cls, hkStatisticsCollector* collector);
  51. };
  52. #endif // HK_STATISTICS_COLLECTOR_UTIL_H
  53. /*
  54. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  55. * Confidential Information of Havok.  (C) Copyright 1999-2009
  56. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  57. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  58. * rights, and intellectual property rights in the Havok software remain in
  59. * Havok and/or its suppliers.
  60. * Use of this software for evaluation purposes is subject to and indicates
  61. * acceptance of the End User licence Agreement for this product. A copy of
  62. * the license is included with this software and is also available at www.havok.com/tryhavok.
  63. */