1#pragma once
2
3#include "stream/seadStream.h"
4#include "stream/seadStreamSrc.h"
5
6namespace sead
7{
8class BufferReadStreamSrc : public StreamSrc
9{
10public:
11 BufferReadStreamSrc(StreamSrc* src, void* buffer, u32 buffer_size);
12 virtual ~BufferReadStreamSrc();
13
14 u32 read(void* data, u32 size) override;
15 u32 write(const void* data, u32 size) override;
16 u32 skip(s32 offset) override;
17 void rewind() override;
18 bool isEOF() override;
19 bool flush() override;
20
21private:
22 StreamSrc* mSrc;
23 u8* mBuffer;
24 u32 mBufferSize;
25 u32 mCurrentSize;
26 u32 mCurrentPos;
27};
28
29class BufferReadStream : public ReadStream
30{
31public:
32 BufferReadStream(ReadStream* stream, const void* buffer, u32 buffer_size);
33 ~BufferReadStream() override;
34
35private:
36 BufferReadStreamSrc mSrc;
37};
38
39class BufferWriteStreamSrc : public StreamSrc
40{
41public:
42 BufferWriteStreamSrc(StreamSrc* src, void* buffer, u32 buffer_size);
43 virtual ~BufferWriteStreamSrc();
44
45 u32 read(void* data, u32 size) override;
46 u32 write(const void* data, u32 size) override;
47 u32 skip(s32 offset) override;
48 void rewind() override;
49 bool isEOF() override { return false; }
50 bool flush() override;
51
52private:
53 StreamSrc* mSrc;
54 u8* mBuffer;
55 u32 mBufferSize;
56 u32 mCurrentPos;
57};
58
59class BufferWriteStream : public WriteStream
60{
61public:
62 BufferWriteStream(WriteStream* stream, void* buffer, u32 buffer_size);
63 ~BufferWriteStream() override;
64
65private:
66 BufferWriteStreamSrc mSrc;
67};
68
69class BufferMultiByteTextWriteStreamSrc : public BufferWriteStreamSrc
70{
71public:
72 BufferMultiByteTextWriteStreamSrc(StreamSrc* src, void* buffer, u32 buffer_size);
73 ~BufferMultiByteTextWriteStreamSrc() override = default;
74 u32 write(const void* data, u32 size) override;
75};
76
77class BufferMultiByteTextWriteStream : public WriteStream
78{
79public:
80 BufferMultiByteTextWriteStream(WriteStream* stream, void* buffer, u32 buffer_size);
81 ~BufferMultiByteTextWriteStream() override;
82
83private:
84 BufferMultiByteTextWriteStreamSrc mSrc;
85};
86
87class BufferMultiByteNullTerminatedTextWriteStreamSrc : public BufferMultiByteTextWriteStreamSrc
88{
89public:
90 ~BufferMultiByteNullTerminatedTextWriteStreamSrc() override = default;
91 bool flush() override;
92};
93} // namespace sead
94