hkBindingClassNameRegistry.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_BINDING_CLASS_NAME_REGISTRY_H
  9. #define HK_BINDING_CLASS_NAME_REGISTRY_H
  10. #include <Common/Base/Container/StringMap/hkStringMap.h>
  11. #include <Common/Serialize/Util/hkChainedClassNameRegistry.h>
  12. #include <Common/Base/Container/StringMap/hkStringMap.h>
  13. #include <Common/Serialize/Version/hkVersionRegistry.h>
  14. #include <Common/Serialize/Util/hkPointerMultiMap.h>
  15. struct hkInternalClassEnum;
  16. class hkBindingClassNameRegistry;
  17. class hkClass;
  18. /// Associates string type names with hkClass objects.
  19. class hkBindingClassNameRegistry : public hkChainedClassNameRegistry
  20. {
  21. public:
  22. hkBindingClassNameRegistry(const hkVersionRegistry::ClassRename* renames = HK_NULL, const hkClassNameRegistry* next = HK_NULL);
  23. ~hkBindingClassNameRegistry();
  24. /// Get a class by name or HK_NULL if it was not registered.
  25. virtual const hkClass* getClassByNameNoRecurse( const char* className ) const;
  26. /// Get a class by name or HK_NULL if it was not registered.
  27. virtual const hkClass* getClassByName( const char* className ) const;
  28. /// Register renames.
  29. virtual void registerRenames( const hkVersionRegistry::ClassRename* renames );
  30. /// Register renames.
  31. virtual void registerRenames( const hkStringMap<const char*>& newNameFromOldNameMap );
  32. protected:
  33. const char* getNewName(const char* oldName) const;
  34. private:
  35. class ClassAllocationsTracker
  36. {
  37. public:
  38. ClassAllocationsTracker();
  39. ~ClassAllocationsTracker();
  40. hkClass* restoreClassHierarchy(const hkClass& classToCopy, const hkBindingClassNameRegistry* classRegistry, const hkStringMap<const char*>& oldClassNameFromNewNameMap, hkStringMap<hkClass*>& classesInOut );
  41. private:
  42. struct ClassData
  43. {
  44. hkClass* allocatedClass;
  45. hkPointerMap<hkInternalClassEnum*, hkBool32> enumsAllocatedForMembers;
  46. };
  47. struct UnresolvedClassPointerTracker
  48. {
  49. UnresolvedClassPointerTracker();
  50. ~UnresolvedClassPointerTracker();
  51. void classPointedBy( const hkClass* newClass, const hkClass** fromWhere );
  52. // replace class entry and remove it from tracking
  53. void replaceClassAndRemove( const hkClass* oldClass, const hkClass* newClass );
  54. void resolveClasses(hkPointerMap<const hkClass*, const hkClass*>& classFromUnresolved);
  55. int getSize() const;
  56. hkPointerMultiMap<void*, const hkClass**> m_pointers;
  57. };
  58. // allocate class functions
  59. hkInternalClassEnum* allocateEnums(const hkInternalClassEnum* enumsToCopy, int numEnums);
  60. hkInternalClassMember* allocateMembers(const hkInternalClassMember* membersToCopy, int numMembers,
  61. const hkInternalClassEnum* originalEnums, const hkInternalClassEnum* copiedEnums, int numAvailableEnums,
  62. hkPointerMap<hkInternalClassEnum*, hkBool32>& enumsAllocatedForMembersOut, UnresolvedClassPointerTracker& unresolvedClassPointersInOut);
  63. void* allocateDefaults(const hkClass& klass, void* defaultsToCopy);
  64. hkClass* allocateClass(const hkClass& classToDuplicate, const char* classNameToSet, UnresolvedClassPointerTracker& unresolvedClassPointersOut);
  65. // deallocate class functions
  66. void deallocateEnums(hkInternalClassEnum* enums, int numEnums);
  67. void deallocateMembers(hkInternalClassMember* members, int numMembers, hkPointerMap<hkInternalClassEnum*, hkBool32>& enumsAllocatedForMembersInOut);
  68. void deallocateClass(hkClass* classToDeallocate, hkPointerMap<hkInternalClassEnum*, hkBool32>& enumsAllocatedForMembersInOut);
  69. private:
  70. hkArray<ClassData> m_trackedClassData; // array of key entries for class allocations
  71. };
  72. mutable ClassAllocationsTracker m_tracker;
  73. hkStringMap<const char*> m_newNameFromOldName;
  74. hkStringMap<const char*> m_oldNameFromNewName;
  75. };
  76. #endif // HK_BINDING_CLASS_NAME_REGISTRY_H
  77. /*
  78. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  79. * Confidential Information of Havok.  (C) Copyright 1999-2009
  80. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  81. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  82. * rights, and intellectual property rights in the Havok software remain in
  83. * Havok and/or its suppliers.
  84. * Use of this software for evaluation purposes is subject to and indicates
  85. * acceptance of the End User licence Agreement for this product. A copy of
  86. * the license is included with this software and is also available at www.havok.com/tryhavok.
  87. */