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

其他游戏

开发平台:

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_UTIL_H
  9. #define HK_SERIALIZE_UTIL_H
  10. #include <Common/Serialize/Util/hkStructureLayout.h>
  11. #include <Common/Serialize/Tagfile/hkTagfileWriter.h>
  12. #include <Common/Serialize/Packfile/hkPackfileWriter.h>
  13. class hkClass;
  14. class hkResource;
  15. class hkDataObject;
  16. class hkStreamReader;
  17. class hkStreamWriter;
  18. class hkClassNameRegistry;
  19. class hkTypeInfoRegistry;
  20. /// hkSerializeUtil utility functions
  21. namespace hkSerializeUtil
  22. {
  23. /// Load serialized objects from stream and return pointer
  24. /// to hkResource object.
  25. /// To access hkResource objects you should call hkResource::getContents()
  26. /// or hkResource::getContentsWithRegistry() specifying type of top level
  27. /// object pointer you expect.
  28. /// hkResource is reference counted and users are responsible to
  29. /// remove reference when they do not need the hkResource content.
  30. /// The objects owned by hkResource are not reference counted.
  31. hkResource* HK_CALL load( hkStreamReader* sr );
  32. /// Load serialized objects from a file using name and return pointer
  33. /// to hkResource object.
  34. /// See hkSerializeUtil::load( hkStreamReader* sr ) for details.
  35. hkResource* HK_CALL load( const char* filename );
  36. /// Load serialized objects from buffer and return pointer
  37. /// to hkResource object. The buffer may be freed after loading.
  38. /// See hkSerializeUtil::load( hkStreamReader* sr ) for details.
  39. hkResource* HK_CALL load( const void* buf, int buflen );
  40. /// Error details class for loading packfile/tagfile.
  41. struct ErrorDetails
  42. {
  43. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_SERIALIZE, ErrorDetails );
  44. /// ErrorDetails constructor.
  45. ErrorDetails() : id(ERRORID_NONE) {}
  46. /// Error ids for loading packfile/tagfile.
  47. enum ErrorID
  48. {
  49. /// No errors reading from stream.
  50. ERRORID_NONE,
  51. /// Failed to read from stream.
  52. ERRORID_READ_FAILED,
  53. /// Unsupported file format.
  54. ERRORID_UNSUPPORTED_FORMAT,
  55. /// Packfile cannot be read on this platform.
  56. ERRORID_PACKFILE_PLATFORM,
  57. /// Versioning cannot be applied to provided
  58. ERRORID_VERSIONING_FAILED
  59. };
  60. /// Error id. Default is ErrorDetails::ERROR_NOT_FOUND.
  61. hkEnum<enum ErrorID, hkInt32> id;
  62. /// Detailed error message, if error id is not ErrorDetails::ERROR_NOT_FOUND.
  63. hkString defaultMessage;
  64. };
  65. /// Load serialized objects from stream and return pointer
  66. /// to hkResource object. If the 'classReg' is HK_NULL the
  67. /// class name registry from hkBuiltinTypeRegistry is used instead.
  68. /// The function does additional check for the stream format, versioning and finishing steps.
  69. /// It will return HK_NULL if the checks failed. The error details are
  70. /// returned in 'resultOut'.
  71. /// Usually you should use hkSerializeUtil::load().
  72. hkResource* HK_CALL loadWithDetails( hkStreamReader* stream, ErrorDetails& resultOut, const hkClassNameRegistry* classReg = HK_NULL );
  73. /// Save a snapshot of a given object in packfile form using provided writer.
  74. /// Returns HK_SUCCESS if successful.
  75. /// If you don't provide a target layout then the current host layout is assumed.
  76. /// NOTE: Some objects are inherently not serializable because they point to
  77. /// external memory, i.e. the vertex and index arrays of an hkpMeshShape.
  78. /// These objects should be converted before saving, i.e hkpMeshShape -> hkpStorageMeshShape
  79. /// (see hkpHavokSnapshot::ConvertListener class for details).
  80. /// If you want these conversions applied you should provide a hkpHavokSnapshot::ConvertListener as
  81. /// a value for userListener.
  82. hkResult HK_CALL savePackfile( const void* object, const hkClass& klass, hkStreamWriter* writer, const hkPackfileWriter::Options& options, hkBool32 binary = true, hkPackfileWriter::AddObjectListener* userListener = HK_NULL );
  83. /// Save a snapshot of a given object in tagfile form using provided writer.
  84. /// Returns HK_SUCCESS if successful.
  85. /// NOTE: Some objects are inherently not serializable because they point to
  86. /// external memory, i.e. the vertex and index arrays of an hkpMeshShape.
  87. /// These objects should be converted before saving, i.e hkpMeshShape -> hkpStorageMeshShape
  88. /// (see hkpHavokSnapshot::ConvertListener class for details).
  89. /// If you want these conversions applied you should provide a hkpHavokSnapshot::ConvertListener as
  90. /// a value for userListener.
  91. hkResult HK_CALL saveTagfile( const void* object, const hkClass& klass, hkStreamWriter* writer, hkBool32 binary = true, hkPackfileWriter::AddObjectListener* userListener = HK_NULL );
  92. /// Save a given data object in tagfile form using provided writer.
  93. /// Returns HK_SUCCESS if successful.
  94. hkResult HK_CALL saveTagfile( const hkDataObject& object, hkStreamWriter* writer, hkBool32 binary = true );
  95. }
  96. #endif // HK_SERIALIZE_UTIL_H
  97. /*
  98. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  99. * Confidential Information of Havok.  (C) Copyright 1999-2009
  100. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  101. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  102. * rights, and intellectual property rights in the Havok software remain in
  103. * Havok and/or its suppliers.
  104. * Use of this software for evaluation purposes is subject to and indicates
  105. * acceptance of the End User licence Agreement for this product. A copy of
  106. * the license is included with this software and is also available at www.havok.com/tryhavok.
  107. */