DataStream.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #pragma once
  2. #include "Common.h"
  3. NS_BF_BEGIN;
  4. class DataStream
  5. {
  6. public:
  7. bool mBigEndian;
  8. int mBitPos;
  9. uint32 mCurBitInt;
  10. int mReadBitIntPos; // in bits
  11. protected:
  12. uint32 GetBitInt(int bitPos);
  13. public:
  14. DataStream();
  15. virtual ~DataStream() {}
  16. virtual bool Eof() = 0;
  17. virtual int GetSize() = 0;
  18. virtual void Read(void* ptr, int size) = 0;
  19. virtual void Write(void* ptr, int size) = 0;
  20. virtual void WriteZeros(int size);
  21. virtual void Align(int size);
  22. virtual int GetPos() = 0;
  23. virtual void Seek(int size) = 0;
  24. virtual void SetPos(int pos) = 0;
  25. virtual int8 ReadInt8();
  26. virtual uint8 ReadUInt8();
  27. virtual int16 ReadInt16();
  28. virtual uint16 ReadUInt16();
  29. virtual int32 ReadInt32();
  30. virtual int64 ReadInt64();
  31. virtual float ReadFloat();
  32. virtual double ReadDouble();
  33. virtual String ReadAscii8SizedString();
  34. virtual String ReadAscii32SizedString();
  35. virtual String ReadUnicode32SizedString();
  36. virtual String ReadSZ();
  37. template <typename T>
  38. void ReadT(const T& val)
  39. {
  40. Read((void*) &val, sizeof(T));
  41. }
  42. virtual void Write(float val);
  43. virtual void Write(uint8 val);
  44. virtual void Write(int8 val);
  45. virtual void Write(int16 val);
  46. virtual void Write(int32 val);
  47. virtual void Write(int64 val);
  48. virtual void Write(const StringImpl& val);
  49. virtual void Write(DataStream& refStream);
  50. virtual void WriteSNZ(const StringImpl& val);
  51. virtual void WriteSZ(const StringImpl& val);
  52. template <typename T>
  53. void WriteT(const T& val)
  54. {
  55. Write((void*)&val, sizeof(T));
  56. }
  57. virtual void SyncBitPos();
  58. virtual void SyncBytePos();
  59. virtual int ReadUBits(int bits);
  60. virtual void SeekBits(int bits);
  61. };
  62. NS_BF_END;