hkVersionUtil.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_SERIALIZE_VERSIONUTIL_H
  9. #define HK_SERIALIZE_VERSIONUTIL_H
  10. #include <Common/Serialize/Version/hkVersionRegistry.h>
  11. class hkObjectUpdateTracker;
  12. class hkClassNameRegistry;
  13. class hkPackfileReader;
  14. /// Versioning utility functions and structures.
  15. namespace hkVersionUtil
  16. {
  17. /// Get the current sdk version as written in packfiles.
  18. const char* HK_CALL getCurrentVersion();
  19. /// Copies the old named member to the new named member.
  20. /// The members must have identical sizes.
  21. void HK_CALL renameMember( hkVariant& oldObj, const char* oldName, hkVariant& newObj, const char* newName );
  22. /// Copy defaults for new members.
  23. /// For each member in newClass which is not in oldClass and which
  24. /// has a specified default, copy it in into obj.
  25. void HK_CALL copyDefaults( void* obj, const hkClass& oldClass, const hkClass& newClass );
  26. /// Find variants in obj and update their class pointers.
  27. /// For each variant member in obj, update its class to the class
  28. /// from the given registry.
  29. /// ie. obj.m_variant.m_class = reg.getClassByName( obj.m_variant.m_class->getName() )
  30. void HK_CALL updateVariantClassPointers( void* obj, const hkClass& klass, hkClassNameRegistry& reg, int numObj=1 );
  31. /// Utility function to recompute member offsets.
  32. void HK_CALL recomputeClassMemberOffsets( hkClass*const* classes, int classVersion );
  33. /// Low level interface to versioning.
  34. /// Apply the updateDescriptions to each object in objectsInOut.
  35. /// Note that the size and ordering of objectsInOut may change.
  36. hkResult HK_CALL updateSingleVersion(
  37. hkArray<hkVariant>& objectsInOut,
  38. hkObjectUpdateTracker& tracker,
  39. const hkVersionRegistry::UpdateDescription& updateDescription,
  40. const hkClassNameRegistry* newClassRegistry );
  41. /// Search for and apply a sequence of updates.
  42. /// Given fromVersion and toVersion, search for a sequence
  43. /// of updates which will convert between them. Calls
  44. /// updateSingleVersion for each step in the sequence.
  45. hkResult HK_CALL updateBetweenVersions(
  46. hkArray<hkVariant>& objectsInOut,
  47. hkObjectUpdateTracker& tracker,
  48. const hkVersionRegistry& reg,
  49. const char* fromVersion,
  50. const char* toVersion = HK_NULL );
  51. /// Update the packfile contents to the latest version in reg.
  52. /// Usually the the hkVersionRegistry singleton is used for reg.
  53. /// Updating will fail if a binary packfile has been stripped of its
  54. /// table of contents. Xml packfiles can always be updated.
  55. hkResult HK_CALL updateToCurrentVersion(
  56. hkPackfileReader& reader,
  57. const hkVersionRegistry& reg );
  58. /// Utility function to generate extern list of classes of current version.
  59. /// The classes extern declaration is output into provided hkOStream.
  60. hkResult HK_CALL generateCppExternClassList(hkOstream& os, const char* headerMacro, const hkClass*const* classesToGenerate, const char* registryVariableName);
  61. /// Utility function to generate list of classes of current version.
  62. /// The classes are generated as static data in C++ format and output
  63. /// into provided hkOStream. The pch file name may be provided for
  64. /// convenience, so the output can be used as source file in project
  65. /// without modifications.
  66. hkResult HK_CALL generateCppClassList(hkOstream& os, const hkClass*const* classesToGenerate, const char* pchfilename, const char* registryVariableName);
  67. }
  68. class CollectClassDefinitions
  69. {
  70. public:
  71. CollectClassDefinitions(const hkArray<const hkClass*>& originalClassList,
  72. hkPointerMap<const hkClassEnum*, char*>& enumNameFromPointer,
  73. hkStringMap<hkBool32>& enumDoneFlagFromName);
  74. const hkString& getClassExternList() const;
  75. const hkString& getClassDefinitionList() const;
  76. void defineClassClass(const hkClass& klass);
  77. private:
  78. const hkClassEnum* m_classMemberEnumType;
  79. const hkArray<const hkClass*>& m_originalClassList;
  80. hkString m_classExternList;
  81. hkString m_classDefinitionList;
  82. hkPointerMap<const hkClassEnum*, char*>& m_enumNameFromPointer;
  83. hkStringMap<hkBool32>& m_enumDoneFlagFromName;
  84. hkStringMap<hkBool32> m_doneClasses;
  85. };
  86. #endif // HK_SERIALIZE_VERSIONUTIL_H
  87. /*
  88. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  89. * Confidential Information of Havok.  (C) Copyright 1999-2009
  90. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  91. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  92. * rights, and intellectual property rights in the Havok software remain in
  93. * Havok and/or its suppliers.
  94. * Use of this software for evaluation purposes is subject to and indicates
  95. * acceptance of the End User licence Agreement for this product. A copy of
  96. * the license is included with this software and is also available at www.havok.com/tryhavok.
  97. */