| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
- // SPDX-License-Identifier: GPL-2.0-or-later
- #include <stdexcept>
- #include "common/common_types.h"
- #include "common/stream.h"
- namespace Common {
- Stream::Stream() = default;
- Stream::~Stream() = default;
- void Stream::Seek(s32 offset, SeekOrigin origin) {
- if (origin == SeekOrigin::SetOrigin) {
- if (offset < 0) {
- position = 0;
- } else if (position >= buffer.size()) {
- position = buffer.size();
- } else {
- position = offset;
- }
- } else if (origin == SeekOrigin::FromCurrentPos) {
- Seek(static_cast<s32>(position) + offset, SeekOrigin::SetOrigin);
- } else if (origin == SeekOrigin::FromEnd) {
- Seek(static_cast<s32>(buffer.size()) - offset, SeekOrigin::SetOrigin);
- }
- }
- u8 Stream::ReadByte() {
- if (position < buffer.size()) {
- return buffer[position++];
- } else {
- throw std::out_of_range("Attempting to read a byte not within the buffer range");
- }
- }
- void Stream::WriteByte(u8 byte) {
- if (position == buffer.size()) {
- buffer.push_back(byte);
- position++;
- } else {
- buffer.insert(buffer.begin() + position, byte);
- }
- }
- } // namespace Common
|