2022-02-17 23:37:54 -08:00
|
|
|
#pragma once
|
2022-02-19 05:04:45 -08:00
|
|
|
#include "COutputStream.hpp"
|
2022-02-17 23:37:54 -08:00
|
|
|
|
|
|
|
namespace metaforce {
|
|
|
|
class CMemoryStreamOut final : public COutputStream {
|
|
|
|
public:
|
|
|
|
enum class EOwnerShip {
|
|
|
|
NotOwned,
|
|
|
|
Owned,
|
|
|
|
};
|
2022-02-24 23:45:25 -08:00
|
|
|
|
2022-02-17 23:37:54 -08:00
|
|
|
private:
|
|
|
|
u8* x7c_ptr = nullptr;
|
|
|
|
u32 x80_len = 0;
|
|
|
|
u32 x84_position = 0;
|
|
|
|
bool x88_owned;
|
|
|
|
|
2022-03-22 01:37:10 -07:00
|
|
|
protected:
|
|
|
|
void Write(const u8* ptr, u32 len) override;
|
2022-02-17 23:37:54 -08:00
|
|
|
public:
|
2022-03-22 01:37:10 -07:00
|
|
|
CMemoryStreamOut(u8* workBuf, u32 len, EOwnerShip ownership = EOwnerShip::NotOwned, s32 blockLen = 4096)
|
|
|
|
: COutputStream(blockLen), x7c_ptr(workBuf), x80_len(len), x88_owned(ownership == EOwnerShip::Owned) {}
|
2022-02-17 23:37:54 -08:00
|
|
|
|
|
|
|
~CMemoryStreamOut() override;
|
|
|
|
|
2022-02-27 17:11:10 -08:00
|
|
|
u32 GetWritePosition() const { return x84_position; }
|
2022-02-17 23:37:54 -08:00
|
|
|
};
|
2022-02-24 23:45:25 -08:00
|
|
|
} // namespace metaforce
|