CMemoryStream.cpp 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "StdInc.h"
  2. #include "CMemoryStream.h"
  3. CMemoryStream::CMemoryStream() : data(nullptr), size(0), position(0), freeData(false)
  4. {
  5. }
  6. CMemoryStream::CMemoryStream(const ui8 * data, si64 size, bool freeData /*= false*/) : data(data), size(size), position(0), freeData(freeData)
  7. {
  8. }
  9. CMemoryStream::~CMemoryStream()
  10. {
  11. close();
  12. }
  13. void CMemoryStream::open(const ui8 * data, si64 size, bool freeData /*= false*/)
  14. {
  15. close();
  16. this->size = size;
  17. this->data = data;
  18. this->freeData = freeData;
  19. this->position = 0;
  20. }
  21. si64 CMemoryStream::read(ui8 * data, si64 size)
  22. {
  23. std::copy(this->data + position, this->data + position + size, data);
  24. position += size;
  25. return size;
  26. }
  27. si64 CMemoryStream::seek(si64 position)
  28. {
  29. si64 diff = this->position;
  30. this->position = position;
  31. return position - diff;
  32. }
  33. si64 CMemoryStream::tell()
  34. {
  35. return this->position;
  36. }
  37. si64 CMemoryStream::skip(si64 delta)
  38. {
  39. this->position += delta;
  40. return delta;
  41. }
  42. si64 CMemoryStream::getSize()
  43. {
  44. return size;
  45. }
  46. void CMemoryStream::close()
  47. {
  48. if(freeData)
  49. {
  50. delete[] data;
  51. }
  52. }