MemoryBuffer.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // Copyright (c) 2008-2022 the Urho3D project
  2. // License: MIT
  3. #include "../Precompiled.h"
  4. #include "../IO/MemoryBuffer.h"
  5. namespace Urho3D
  6. {
  7. MemoryBuffer::MemoryBuffer(void* data, i32 size) :
  8. AbstractFile(size),
  9. buffer_((byte*)data),
  10. readOnly_(false)
  11. {
  12. assert(size >= 0);
  13. if (!buffer_)
  14. size_ = 0;
  15. }
  16. MemoryBuffer::MemoryBuffer(const void* data, i32 size) :
  17. AbstractFile(size),
  18. buffer_((byte*)data),
  19. readOnly_(true)
  20. {
  21. assert(size >= 0);
  22. if (!buffer_)
  23. size_ = 0;
  24. }
  25. MemoryBuffer::MemoryBuffer(Vector<byte>& data) :
  26. AbstractFile(data.Size()),
  27. buffer_(data.Begin().ptr_),
  28. readOnly_(false)
  29. {
  30. }
  31. MemoryBuffer::MemoryBuffer(const Vector<byte>& data) :
  32. AbstractFile(data.Size()),
  33. buffer_(const_cast<byte*>(data.Begin().ptr_)),
  34. readOnly_(true)
  35. {
  36. }
  37. i32 MemoryBuffer::Read(void* dest, i32 size)
  38. {
  39. assert(size >= 0);
  40. if (size + position_ > size_)
  41. size = size_ - position_;
  42. if (!size)
  43. return 0;
  44. byte* srcPtr = &buffer_[position_];
  45. byte* destPtr = (byte*)dest;
  46. position_ += size;
  47. memcpy(destPtr, srcPtr, size);
  48. return size;
  49. }
  50. i64 MemoryBuffer::Seek(i64 position)
  51. {
  52. assert(position >= 0 && position <= M_MAX_INT);
  53. if (position > size_)
  54. position = size_;
  55. position_ = position;
  56. return position_;
  57. }
  58. i32 MemoryBuffer::Write(const void* data, i32 size)
  59. {
  60. assert(size >= 0);
  61. if (size + position_ > size_)
  62. size = size_ - position_;
  63. if (!size)
  64. return 0;
  65. byte* srcPtr = (byte*)data;
  66. byte* destPtr = &buffer_[position_];
  67. position_ += size;
  68. memcpy(destPtr, srcPtr, size);
  69. return size;
  70. }
  71. }