2020-10-27 06:07:36 +03:00
|
|
|
// Copyright 2020 yuzu Emulator Project
|
|
|
|
// Licensed under GPLv2 or any later version
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
#include "common/common_types.h"
|
|
|
|
|
|
|
|
namespace Common {
|
|
|
|
|
|
|
|
enum class SeekOrigin {
|
|
|
|
SetOrigin,
|
|
|
|
FromCurrentPos,
|
|
|
|
FromEnd,
|
|
|
|
};
|
|
|
|
|
|
|
|
class Stream {
|
|
|
|
public:
|
|
|
|
/// Stream creates a bitstream and provides common functionality on the stream.
|
|
|
|
explicit Stream();
|
|
|
|
~Stream();
|
|
|
|
|
2020-10-30 05:55:56 +03:00
|
|
|
Stream(const Stream&) = delete;
|
|
|
|
Stream& operator=(const Stream&) = delete;
|
|
|
|
|
|
|
|
Stream(Stream&&) = default;
|
|
|
|
Stream& operator=(Stream&&) = default;
|
|
|
|
|
2020-10-27 06:07:36 +03:00
|
|
|
/// Reposition bitstream "cursor" to the specified offset from origin
|
|
|
|
void Seek(s32 offset, SeekOrigin origin);
|
|
|
|
|
|
|
|
/// Reads next byte in the stream buffer and increments position
|
|
|
|
u8 ReadByte();
|
|
|
|
|
|
|
|
/// Writes byte at current position
|
|
|
|
void WriteByte(u8 byte);
|
|
|
|
|
2020-10-30 05:55:56 +03:00
|
|
|
[[nodiscard]] std::size_t GetPosition() const {
|
2020-10-27 06:07:36 +03:00
|
|
|
return position;
|
|
|
|
}
|
|
|
|
|
2020-10-30 05:55:56 +03:00
|
|
|
[[nodiscard]] std::vector<u8>& GetBuffer() {
|
2020-10-27 06:07:36 +03:00
|
|
|
return buffer;
|
|
|
|
}
|
|
|
|
|
2020-10-30 05:55:56 +03:00
|
|
|
[[nodiscard]] const std::vector<u8>& GetBuffer() const {
|
2020-10-27 06:07:36 +03:00
|
|
|
return buffer;
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
std::vector<u8> buffer;
|
|
|
|
std::size_t position{0};
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace Common
|