Clone of PhatAC @ https://github.com/floaterxk/PhatAC

BinaryWriter.h 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #pragma once
  2. class BinaryWriter
  3. {
  4. public:
  5. BinaryWriter();
  6. ~BinaryWriter();
  7. void ExpandBuffer(size_t len);
  8. void AppendString(const char *szString);
  9. void AppendData(const void *pData, size_t len);
  10. void Align(void);
  11. template <class DataT> void AppendData(DataT pData)
  12. {
  13. AppendData(&pData, sizeof(DataT));
  14. }
  15. __forceinline void WriteChar(char f00d) { AppendData(f00d); }
  16. __forceinline void WriteShort(short f00d) { AppendData(f00d); }
  17. __forceinline void WriteLong(long f00d) { AppendData(f00d); }
  18. __forceinline void WriteFloat(float f00d) { AppendData(f00d); }
  19. __forceinline void WriteDouble(double f00d) { AppendData(f00d); }
  20. __forceinline void WriteBYTE(BYTE f00d) { AppendData(f00d); }
  21. __forceinline void WriteWORD(WORD f00d) { AppendData(f00d); }
  22. __forceinline void WriteDWORD(DWORD f00d) { AppendData(f00d); }
  23. __forceinline void WritePackedDWORD(DWORD f00d) {
  24. if (f00d < 0x8000)
  25. {
  26. WriteWORD((WORD)f00d);
  27. }
  28. else
  29. {
  30. WriteDWORD((f00d << 16) | ((f00d >> 16) | 0x8000));
  31. }
  32. }
  33. __forceinline void WriteString(const char *f00d) { AppendString(f00d); }
  34. __forceinline void WriteData(const void *data, size_t len) { AppendData(data, len); }
  35. template<typename A, typename B> void WriteMap(std::map<A, B> &table)
  36. {
  37. WriteWORD((WORD) table.size());
  38. WriteWORD(0x40);
  39. for (std::map<A, B>::iterator keyValuePair = table.begin(); keyValuePair != table.end(); keyValuePair++)
  40. {
  41. AppendData((A)keyValuePair->first);
  42. AppendData((B)keyValuePair->second);
  43. }
  44. }
  45. template<typename A> void WriteMap(std::map<A, std::string> &table)
  46. {
  47. WriteWORD((WORD) table.size());
  48. WriteWORD(0x40);
  49. for (std::map<A, std::string>::iterator keyValuePair = table.begin(); keyValuePair != table.end(); keyValuePair++)
  50. {
  51. AppendData((A)keyValuePair->first);
  52. AppendString(keyValuePair->second.c_str());
  53. }
  54. }
  55. BYTE* GetData();
  56. DWORD GetSize();
  57. protected:
  58. //BYTE m_pbData[0x800];
  59. BYTE* m_pbData;
  60. DWORD m_dwDataSize;
  61. BYTE* m_pbDataPos;
  62. DWORD m_dwSize;
  63. };