hkIArchive.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_BASE_IARCHIVE_H
  9. #define HK_BASE_IARCHIVE_H
  10. class hkStreamReader;
  11. /// Endian-aware binary formatted data reader.
  12. /// The data may optionally be byteswapped as it is read.
  13. /// The default is to read in little endian format.
  14. class hkIArchive: public hkReferencedObject
  15. {
  16. public:
  17. HK_DECLARE_CLASS_ALLOCATOR(HK_MEMORY_CLASS_STREAM);
  18. /// Constructs a new hkIArchive with the specified hkStreamReader.
  19. hkIArchive(hkStreamReader* sb, hkBool byteswap=HK_ENDIAN_BIG);
  20. /// Uses the hkFileSystem to get an hkStreamReader for filename.
  21. hkIArchive(const char* filename, hkBool byteswap=HK_ENDIAN_BIG);
  22. /// Uses the 'mem' inplace. 'mem' should be valid for the lifetime of this object.
  23. hkIArchive(const void* mem, int memSize, hkBool byteswap=HK_ENDIAN_BIG);
  24. /// Destructor.
  25. ~hkIArchive();
  26. //
  27. // Read single elements.
  28. //
  29. /// Reads 8 bits.
  30. /// Value is undefined in the case of error / eof. Use isOk() to validate.
  31. HK_FORCE_INLINE hkChar read8();
  32. /// Reads 8 bits.
  33. /// Value is undefined in the case of error / eof. Use isOk() to validate.
  34. HK_FORCE_INLINE hkUchar read8u();
  35. /// Reads 16 bits.
  36. /// Value is undefined in the case of error / eof. Use isOk() to validate.
  37. HK_FORCE_INLINE hkInt16 read16();
  38. /// Reads 16 bits.
  39. /// Value is undefined in the case of error / eof. Use isOk() to validate.
  40. HK_FORCE_INLINE hkUint16 read16u();
  41. /// Reads 32 bits.
  42. /// Value is undefined in the case of error / eof. Use isOk() to validate.
  43. HK_FORCE_INLINE hkInt32 read32();
  44. /// Reads 32 bits.
  45. /// Value is undefined in the case of error / eof. Use isOk() to validate.
  46. HK_FORCE_INLINE hkUint32 read32u();
  47. /// Reads 64 bits
  48. /// Value is undefined in the case of error / eof. Use isOk() to validate.
  49. HK_FORCE_INLINE hkInt64 read64();
  50. /// Reads 64 bits.
  51. /// Value is undefined in the case of error / eof. Use isOk() to validate.
  52. HK_FORCE_INLINE hkUint64 read64u();
  53. /// Reads 32 bit floats.
  54. /// Value is undefined in the case of error / eof. Use isOk() to validate.
  55. HK_FORCE_INLINE hkFloat32 readFloat32();
  56. /// Reads 64 bit doubles.
  57. /// Value is undefined in the case of error / eof. Use isOk() to validate.
  58. HK_FORCE_INLINE hkDouble64 readDouble64();
  59. //
  60. // Read array elements.
  61. //
  62. /// Reads array of 8 byte data.
  63. HK_FORCE_INLINE void readArray8(hkInt8* buf, int nelem);
  64. /// Reads array of 8 byte data.
  65. HK_FORCE_INLINE void readArray8u(hkUint8* buf, int nelem);
  66. /// Reads array of 16 byte data.
  67. HK_FORCE_INLINE void readArray16(hkInt16* buf, int nelem);
  68. /// Reads array of 16 byte data.
  69. HK_FORCE_INLINE void readArray16u(hkUint16* buf, int nelem);
  70. /// Reads array of 32 byte data.
  71. HK_FORCE_INLINE void readArray32(hkInt32* buf, int nelem);
  72. /// Reads array of 32 byte data.
  73. HK_FORCE_INLINE void readArray32u(hkUint32* buf, int nelem);
  74. /// Reads array of 64 byte data.
  75. HK_FORCE_INLINE void readArray64(hkInt64* buf, int nelem);
  76. /// Reads array of 64 byte data.
  77. HK_FORCE_INLINE void readArray64u(hkUint64* buf, int nelem);
  78. /// Reads array of 32 byte float data.
  79. HK_FORCE_INLINE void readArrayFloat32(hkFloat32* buf, int nelem);
  80. /// Reads array of 64 byte float data.
  81. HK_FORCE_INLINE void readArrayDouble32u(hkDouble64* buf, int nelem);
  82. /// Reads array of sizeelem byte data.
  83. void readArrayGeneric(void* buf, int sizeelem, int nelem);
  84. //
  85. // Other.
  86. //
  87. /// Reads raw data.
  88. int readRaw( void* buf, int nbytes);
  89. /// Set byteswapping.
  90. HK_FORCE_INLINE void setByteSwap(hkBool on);
  91. /// Set byteswapping.
  92. HK_FORCE_INLINE hkBool getByteSwap() const;
  93. /// Returns the current error status of the stream.
  94. /// Notice that end-of-file will only be detected after an unsuccessful read
  95. hkBool isOk() const;
  96. /// Returns the underlying streambuf used by this hkIstream
  97. hkStreamReader* getStreamReader();
  98. /// Sets the underlying hkStreamReader for this hkIstream
  99. void setStreamReader(hkStreamReader* newReader);
  100. protected:
  101. /// The underlying stream reader. 
  102. hkStreamReader* m_streamReader;
  103. /// Should we byteswap.
  104. hkBool m_byteSwap;
  105. };
  106. typedef hkIArchive hkIfArchive;
  107. #include <Common/Base/System/Io/IArchive/hkIArchive.inl>
  108. #endif // HK_BASE_IARCHIVE_H
  109. /*
  110. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  111. * Confidential Information of Havok.  (C) Copyright 1999-2009
  112. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  113. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  114. * rights, and intellectual property rights in the Havok software remain in
  115. * Havok and/or its suppliers.
  116. * Use of this software for evaluation purposes is subject to and indicates
  117. * acceptance of the End User licence Agreement for this product. A copy of
  118. * the license is included with this software and is also available at www.havok.com/tryhavok.
  119. */