stream.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright 2020 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <stdexcept>
  5. #include "common/common_types.h"
  6. #include "common/stream.h"
  7. namespace Common {
  8. Stream::Stream() = default;
  9. Stream::~Stream() = default;
  10. void Stream::Seek(s32 offset, SeekOrigin origin) {
  11. if (origin == SeekOrigin::SetOrigin) {
  12. if (offset < 0) {
  13. position = 0;
  14. } else if (position >= buffer.size()) {
  15. position = buffer.size();
  16. } else {
  17. position = offset;
  18. }
  19. } else if (origin == SeekOrigin::FromCurrentPos) {
  20. Seek(static_cast<s32>(position) + offset, SeekOrigin::SetOrigin);
  21. } else if (origin == SeekOrigin::FromEnd) {
  22. Seek(static_cast<s32>(buffer.size()) - offset, SeekOrigin::SetOrigin);
  23. }
  24. }
  25. u8 Stream::ReadByte() {
  26. if (position < buffer.size()) {
  27. return buffer[position++];
  28. } else {
  29. throw std::out_of_range("Attempting to read a byte not within the buffer range");
  30. }
  31. }
  32. void Stream::WriteByte(u8 byte) {
  33. if (position == buffer.size()) {
  34. buffer.push_back(byte);
  35. position++;
  36. } else {
  37. buffer.insert(buffer.begin() + position, byte);
  38. }
  39. }
  40. } // namespace Common