CMemoryBuffer.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * CMemoryBuffer.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include "CMemoryBuffer.h"
  12. ///CMemoryBuffer
  13. CMemoryBuffer::CMemoryBuffer():
  14. position(0)
  15. {
  16. }
  17. si64 CMemoryBuffer::write(const ui8 * data, si64 size)
  18. {
  19. //do not shrink
  20. const si64 newSize = tell()+size;
  21. if(newSize>getSize())
  22. buffer.resize(newSize);
  23. std::copy(data, data + size, buffer.data() + position);
  24. position += size;
  25. return size;
  26. }
  27. si64 CMemoryBuffer::read(ui8 * data, si64 size)
  28. {
  29. si64 toRead = std::min(getSize() - tell(), size);
  30. if(toRead > 0)
  31. {
  32. std::copy(buffer.data() + position, buffer.data() + position + toRead, data);
  33. position += toRead;
  34. }
  35. return toRead;
  36. }
  37. si64 CMemoryBuffer::seek(si64 position)
  38. {
  39. this->position = position;
  40. if (this->position >=getSize())
  41. this->position = getSize();
  42. return this->position;
  43. }
  44. si64 CMemoryBuffer::tell()
  45. {
  46. return position;
  47. }
  48. si64 CMemoryBuffer::skip(si64 delta)
  49. {
  50. auto old_position = tell();
  51. return seek(old_position + delta) - old_position;
  52. }
  53. si64 CMemoryBuffer::getSize()
  54. {
  55. return buffer.size();
  56. }