stream.cpp 1.2 KB

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