| 1 | #pragma once |
| 2 | |
| 3 | #include "basis/seadTypes.h" |
| 4 | #include "prim/seadEndian.h" |
| 5 | #include "prim/seadSafeString.h" |
| 6 | |
| 7 | namespace sead |
| 8 | { |
| 9 | class StreamFormat; |
| 10 | class StreamSrc; |
| 11 | |
| 12 | class Stream |
| 13 | { |
| 14 | public: |
| 15 | enum class Modes |
| 16 | { |
| 17 | Binary = 0, |
| 18 | Text = 1, |
| 19 | }; |
| 20 | |
| 21 | Stream(); |
| 22 | Stream(StreamSrc* src, Modes mode); |
| 23 | Stream(StreamSrc* src, StreamFormat* format); |
| 24 | virtual ~Stream() = default; |
| 25 | |
| 26 | void skip(u32); |
| 27 | void skip(u32, u32); |
| 28 | void rewind(); |
| 29 | bool isEOF(); |
| 30 | |
| 31 | void setBinaryEndian(Endian::Types endian); |
| 32 | void setMode(Modes mode); |
| 33 | void setUserFormat(StreamFormat* format); |
| 34 | |
| 35 | protected: |
| 36 | StreamFormat* mFormat; |
| 37 | StreamSrc* mSrc; |
| 38 | Endian::Types mEndian; |
| 39 | }; |
| 40 | |
| 41 | class ReadStream : public Stream |
| 42 | { |
| 43 | public: |
| 44 | u8 readU8(); |
| 45 | void readU8(u8&); |
| 46 | u16 readU16(); |
| 47 | void readU16(u16&); |
| 48 | u32 readU32(); |
| 49 | void readU32(u32&); |
| 50 | u64 readU64(); |
| 51 | void readU64(u64&); |
| 52 | s8 readS8(); |
| 53 | void readS8(s8&); |
| 54 | s16 readS16(); |
| 55 | void readS16(s16&); |
| 56 | s32 readS32(); |
| 57 | void readS32(s32&); |
| 58 | s64 readS64(); |
| 59 | void readS64(s64&); |
| 60 | f32 readF32(); |
| 61 | void readF32(f32&); |
| 62 | void readBit(void*, u32); |
| 63 | void readString(BufferedSafeString*, u32); |
| 64 | u32 readMemBlock(void*, u32); |
| 65 | |
| 66 | private: |
| 67 | f32 readF32BitImpl_(u32, u32); |
| 68 | f64 readF64BitImpl_(u32, u32); |
| 69 | }; |
| 70 | |
| 71 | class WriteStream : public ReadStream |
| 72 | { |
| 73 | public: |
| 74 | ~WriteStream() override = default; |
| 75 | |
| 76 | void writeU8(u8); |
| 77 | void writeU16(u16); |
| 78 | void writeU32(u32); |
| 79 | void writeU64(u64); |
| 80 | void writeS8(s8); |
| 81 | void writeS16(s16); |
| 82 | void writeS32(s32); |
| 83 | void writeS64(s64); |
| 84 | void writeF32(f32); |
| 85 | void writeBit(const void*, u32); |
| 86 | void writeString(const SafeString&, u32); |
| 87 | void writeMemBlock(const void*, u32); |
| 88 | void (const SafeString&); |
| 89 | void (const SafeString&); |
| 90 | void writeDecorationText(const SafeString&); |
| 91 | void writeNullChar(); |
| 92 | void flush(); |
| 93 | |
| 94 | private: |
| 95 | void writeF32BitImpl_(f32, u32, u32); |
| 96 | void writeF64BitImpl_(f64, u32, u32); |
| 97 | }; |
| 98 | } // namespace sead |
| 99 | |