hkObjectCopier.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_SERIALIZE_OBJECT_COPIER_H
  9. #define HK_SERIALIZE_OBJECT_COPIER_H
  10. #include <Common/Serialize/Util/hkStructureLayout.h>
  11. #include <Common/Serialize/Serialize/hkObjectWriter.h>
  12. class hkOArchive;
  13. /// Copy objects using hkClass information.
  14. /// This is an extremely general purpose copier which can
  15. /// convert on the fly between layouts for different compilers,
  16. /// platforms with different pointer sizes and endianess.
  17. class hkObjectCopier : public hkReferencedObject
  18. {
  19. public:
  20. /// Option flags for how to copy objects.
  21. enum ObjectCopierFlagBits
  22. {
  23. /// Normal behavior, copy all reflected members.
  24. FLAG_NONE = 0x0,
  25. /// Apply the default to variables which have the SERIALIZE_IGNORED bit set.
  26. /// Otherwise they get zeroed.
  27. FLAG_APPLY_DEFAULT_IF_SERIALIZE_IGNORED = 0x1,
  28. /// Don't copy members which have the SERIALIZE_IGNORED bit set.
  29. /// Normally all reflected members are copied.
  30. FLAG_RESPECT_SERIALIZE_IGNORED = 0x2,
  31. };
  32. /// A type for combining the flags from ObjectCopierFlagBits.
  33. typedef hkFlags<ObjectCopierFlagBits,hkUint32> ObjectCopierFlags;
  34. /// Create an hkObjectCopier which will copy between the specified layouts.
  35. hkObjectCopier(const hkStructureLayout& layoutIn, const hkStructureLayout& layoutOut, ObjectCopierFlags flags = FLAG_NONE);
  36. /// Destroy an hkObjectCopier.
  37. virtual ~hkObjectCopier();
  38. /// Copy a single object using class information.
  39. /// The object data is appended to "dataOut". Relocations
  40. /// are appended to "reloc".
  41. virtual hkResult copyObject(const void* dataIn, const hkClass& klassIn,
  42. hkStreamWriter* dataOut, const hkClass& klassOut, hkRelocationInfo& reloc );
  43. /// Get the source layout.
  44. const hkStructureLayout& getLayoutOut() const { return m_layoutOut; }
  45. /// Get the target layout.
  46. const hkStructureLayout& getLayoutIn() const { return m_layoutIn; }
  47. private:
  48. void writeZero( hkOArchive& oa, const hkClassMember& member );
  49. int saveBody( const void* dataIn, const hkClass& klassIn,
  50. hkOArchive& dataOut, const hkClass& klassOut );
  51. void saveExtras( const void* dataIn, const hkClass& klassIn,
  52. hkOArchive& dataOut, const hkClass& klassOut,
  53. int classStart, hkRelocationInfo& fixups, int level = 0 );
  54. /// 
  55. virtual const hkClass* lookupClass( const hkClass& klass )
  56. {
  57. return &klass;
  58. }
  59. protected:
  60. hkStructureLayout m_layoutIn;
  61. hkStructureLayout m_layoutOut;
  62. ObjectCopierFlags m_flags;
  63. hkBool m_byteSwap;
  64. };
  65. #endif //HK_SERIALIZE_OBJECT_COPIER_H
  66. /*
  67. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  68. * Confidential Information of Havok.  (C) Copyright 1999-2009
  69. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  70. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  71. * rights, and intellectual property rights in the Havok software remain in
  72. * Havok and/or its suppliers.
  73. * Use of this software for evaluation purposes is subject to and indicates
  74. * acceptance of the End User licence Agreement for this product. A copy of
  75. * the license is included with this software and is also available at www.havok.com/tryhavok.
  76. */