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

其他游戏

开发平台:

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_RELOCATION_INFO_H
  9. #define HK_RELOCATION_INFO_H
  10. class hkClass;
  11. template<typename t> class hkStorageStringMap;
  12. /// Contains data needed to move buffer in memory.
  13. class hkRelocationInfo
  14. {
  15. public:
  16. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_SERIALIZE, hkRelocationInfo);
  17. /// Create an empty object.
  18. hkRelocationInfo()
  19. : m_pool(HK_NULL)
  20. {
  21. }
  22. hkRelocationInfo(const hkRelocationInfo& r)
  23. {
  24. HK_ASSERT(0,0);
  25. }
  26. /// Destroy object.
  27. ~hkRelocationInfo();
  28. /// Pointer fixups within a buffer.
  29. struct Local
  30. {
  31. Local(int f, int t)
  32. : m_fromOffset(f),
  33. m_toOffset(t)
  34. {
  35. }
  36. /// source offset in buffer
  37. int m_fromOffset;
  38. /// destination offset in buffer
  39. int m_toOffset;
  40. private:
  41. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_SERIALIZE, hkRelocationInfo::Local );
  42. };
  43. /// Pointer fixups to a location outside the buffer.
  44. struct Global
  45. {
  46. Global( int f, void* ta, const hkClass* k, hkBool32 related )
  47. : m_fromOffset(f),
  48. m_toAddress(ta),
  49. m_toClass(k),
  50. m_related(related)
  51. {
  52. }
  53. /// source offset in buffer
  54. int m_fromOffset;
  55. /// dest pointer in global address
  56. void* m_toAddress;
  57. /// type of pointed to object
  58. const hkClass* m_toClass;
  59. /// indicates if object must be kept near the source
  60. hkBool32 m_related;
  61. private:
  62. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_SERIALIZE, hkRelocationInfo::Global );
  63. };
  64. /// Objects which will need a "finish" step on load.
  65. struct Finish
  66. {
  67. Finish( int f, const char* k )
  68. : m_fromOffset(f),
  69. m_className(k)
  70. {
  71. }
  72. /// Object start in buffer
  73. int m_fromOffset;
  74. /// name of fixup
  75. const char* m_className;
  76. private:
  77. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_SERIALIZE, hkRelocationInfo::Finish );
  78. };
  79. /// Pointers to objects not in this data block.
  80. struct Import
  81. {
  82. Import( int fromOffset, const char* identifier )
  83. : m_fromOffset(fromOffset),
  84. m_identifier(identifier)
  85. {
  86. }
  87. /// source offset in buffer
  88. int m_fromOffset;
  89. /// unique identifier
  90. const char* m_identifier;
  91. private:
  92. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_SERIALIZE, hkRelocationInfo::Import );
  93. };
  94. /// Add a local relocation.
  95. void addLocal( int fromOffset, int toOffset )
  96. {
  97. m_local.pushBack( Local(fromOffset,toOffset) );
  98. }
  99. /// Add a global relocation.
  100. void addGlobal( int fromOffset, void* toAddr, const hkClass* klass, hkBool32 related = false )
  101. {
  102. m_global.pushBack( Global(fromOffset, toAddr, klass, related ) );
  103. }
  104. /// Add a finish marker.
  105. void addFinish( int fromOffset, const char* klassName )
  106. {
  107. m_finish.pushBack( Finish(fromOffset, klassName ) );
  108. }
  109. /// Add an import marker.
  110. void addImport( int fromOffset, const char* name );
  111. /// Apply local and global relocations to the supplied buffer.
  112. void applyLocalAndGlobal( void* buffer );
  113. /// Clear all lists.
  114. void clear()
  115. {
  116. m_local.clear();
  117. m_global.clear();
  118. m_finish.clear();
  119. m_imports.clear();
  120. }
  121. public:
  122. hkArray<Local> m_local;
  123. hkArray<Global> m_global;
  124. hkArray<Finish> m_finish;
  125. hkArray<Import> m_imports;
  126. hkStorageStringMap<int>* m_pool;
  127. };
  128. #endif // HK_RELOCATION_INFO_H
  129. /*
  130. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  131. * Confidential Information of Havok.  (C) Copyright 1999-2009
  132. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  133. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  134. * rights, and intellectual property rights in the Havok software remain in
  135. * Havok and/or its suppliers.
  136. * Use of this software for evaluation purposes is subject to and indicates
  137. * acceptance of the End User licence Agreement for this product. A copy of
  138. * the license is included with this software and is also available at www.havok.com/tryhavok.
  139. */