CMemoryStream.cpp 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * CMemoryStream.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 "CMemoryStream.h"
  12. VCMI_LIB_NAMESPACE_BEGIN
  13. CMemoryStream::CMemoryStream(const ui8 * data, si64 size) :
  14. data(data), size(size), position(0)
  15. {
  16. }
  17. si64 CMemoryStream::read(ui8 * data, si64 size)
  18. {
  19. si64 toRead = std::min(this->size - tell(), size);
  20. std::copy(this->data + position, this->data + position + toRead, data);
  21. position += size;
  22. return toRead;
  23. }
  24. si64 CMemoryStream::seek(si64 position)
  25. {
  26. si64 origin = tell();
  27. this->position = std::min(position, size);
  28. return tell() - origin;
  29. }
  30. si64 CMemoryStream::tell()
  31. {
  32. return this->position;
  33. }
  34. si64 CMemoryStream::skip(si64 delta)
  35. {
  36. si64 origin = tell();
  37. this->position += std::min(size - origin, delta);
  38. return tell() - origin;
  39. }
  40. si64 CMemoryStream::getSize()
  41. {
  42. return size;
  43. }
  44. VCMI_LIB_NAMESPACE_END