50 lines
1.3 KiB
C++
50 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include "RE/B/BSResource_ErrorCode.h"
|
|
#include "RE/B/BSResource_Info.h"
|
|
#include "RE/M/MemoryManager.h"
|
|
|
|
namespace RE::BSResource
|
|
{
|
|
class __declspec(novtable) StreamBase
|
|
{
|
|
public:
|
|
inline static constexpr auto RTTI = { RTTI::BSResource__StreamBase };
|
|
inline static constexpr auto VTABLE = { VTABLE::BSResource__StreamBase };
|
|
|
|
enum : std::uint32_t
|
|
{
|
|
kWritable = 1 << 0,
|
|
kBuffered = 1 << 1,
|
|
kFullReadHint = 1 << 2,
|
|
kUnk3 = 1 << 3,
|
|
kUnk4 = 1 << 4,
|
|
kRefCountBeg = 0x1000,
|
|
kRefCountMask = (std::uint32_t)0xFFFFF000
|
|
};
|
|
|
|
StreamBase();
|
|
StreamBase(const StreamBase& a_rhs);
|
|
StreamBase(StreamBase&& a_rhs);
|
|
StreamBase(std::uint32_t a_totalSize, bool writable);
|
|
virtual ~StreamBase() = default; // 00
|
|
|
|
// add
|
|
virtual ErrorCode DoOpen() = 0; // 01
|
|
virtual void DoClose() = 0; // 02
|
|
[[nodiscard]] virtual std::uint64_t DoGetKey() const; // 03 - { return 0; }
|
|
virtual ErrorCode DoGetInfo(Info& a_info); // 04 - { return ErrorCode::kUnsupported; }
|
|
|
|
F4_HEAP_REDEFINE_NEW(StreamBase);
|
|
|
|
std::uint32_t DecRef();
|
|
std::uint32_t IncRef();
|
|
[[nodiscard]] bool IsWritable() const;
|
|
|
|
// members
|
|
std::uint32_t totalSize; // 08
|
|
std::uint32_t flags; // 0C
|
|
};
|
|
static_assert(sizeof(StreamBase) == 0x10);
|
|
}
|