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

BinaryReader.cpp 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #include "StdAfx.h"
  2. #include "BinaryReader.h"
  3. BinaryReader::BinaryReader(BYTE *pData, DWORD dwSize)
  4. {
  5. m_dwErrorCode = 0;
  6. m_pData = pData;
  7. m_pStart = m_pData;
  8. m_pEnd = m_pStart + dwSize;
  9. }
  10. BinaryReader::~BinaryReader()
  11. {
  12. for (std::list<char *>::iterator it = m_lStrings.begin(); it != m_lStrings.end(); it++)
  13. delete[](*it);
  14. m_lStrings.clear();
  15. }
  16. void BinaryReader::ReadAlign()
  17. {
  18. DWORD dwOffset = (DWORD)(m_pData - m_pStart);
  19. if ((dwOffset % 4) != 0)
  20. m_pData += (4 - (dwOffset % 4));
  21. }
  22. void *BinaryReader::ReadArray(size_t size)
  23. {
  24. static BYTE dummyData[10000];
  25. void *retval = m_pData;
  26. m_pData += size;
  27. if (m_pData > m_pEnd)
  28. {
  29. m_dwErrorCode = 2;
  30. return dummyData;
  31. }
  32. return retval;
  33. }
  34. char *BinaryReader::ReadString(void)
  35. {
  36. WORD wLen = ReadWORD();
  37. if (m_dwErrorCode || wLen > MAX_MEALSTRING_LEN)
  38. {
  39. DEBUG_BREAK();
  40. return NULL;
  41. }
  42. char *szArray = (char *)ReadArray(wLen);
  43. if (!szArray)
  44. {
  45. DEBUG_BREAK();
  46. return NULL;
  47. }
  48. char *szString = new char[wLen + 1];
  49. szString[wLen] = 0;
  50. memcpy(szString, szArray, wLen);
  51. m_lStrings.push_back(szString);
  52. ReadAlign();
  53. return szString;
  54. }
  55. BYTE *BinaryReader::GetDataStart()
  56. {
  57. return m_pStart;
  58. }
  59. BYTE *BinaryReader::GetDataPtr()
  60. {
  61. return m_pData;
  62. }
  63. BYTE *BinaryReader::GetDataEnd()
  64. {
  65. return m_pEnd;
  66. }
  67. DWORD BinaryReader::GetDataLen()
  68. {
  69. return (DWORD)(m_pEnd - m_pStart);
  70. }
  71. DWORD BinaryReader::GetOffset()
  72. {
  73. return (DWORD)(m_pData - m_pStart);
  74. }
  75. void BinaryReader::SetOffset(DWORD offset)
  76. {
  77. m_pData = m_pStart + offset;
  78. }
  79. DWORD BinaryReader::GetLastError()
  80. {
  81. return m_dwErrorCode;
  82. }
  83. DWORD BinaryReader::GetDataRemaining()
  84. {
  85. return m_pEnd - m_pData;
  86. }