A reimplementation of Mario Kart Wii's physics engine in C++
Loading...
Searching...
No Matches
Stream.cc
1#include "Stream.hh"
2
3namespace EGG {
4
5Stream::Stream() : m_endian(std::endian::big), m_index(0) {}
6
7Stream::~Stream() = default;
8
9void Stream::skip(u32 count) {
10 m_index += count;
11 ASSERT(!bad());
12}
13
14void Stream::jump(u32 index) {
15 m_index = index;
16 ASSERT(!bad());
17}
18
19u8 Stream::read_u8() {
20 return read<u8>();
21}
22
23u16 Stream::read_u16() {
24 return read<u16>();
25}
26
27u32 Stream::read_u32() {
28 return read<u32>();
29}
30
31u64 Stream::read_u64() {
32 return read<u64>();
33}
34
35s8 Stream::read_s8() {
36 return read<s8>();
37}
38
39s16 Stream::read_s16() {
40 return read<s16>();
41}
42
43s32 Stream::read_s32() {
44 return read<s32>();
45}
46
47s64 Stream::read_s64() {
48 return read<s64>();
49}
50
51f32 Stream::read_f32() {
52 return read<f32>();
53}
54
55f64 Stream::read_f64() {
56 return read<f64>();
57}
58
59void Stream::write_u8(u8 val) {
60 return write(val);
61}
62
63void Stream::write_u16(u16 val) {
64 return write(val);
65}
66
67void Stream::write_u32(u32 val) {
68 return write(val);
69}
70
71void Stream::write_u64(u64 val) {
72 return write(val);
73}
74
75void Stream::write_s8(s8 val) {
76 return write(val);
77}
78
79void Stream::write_s16(s16 val) {
80 return write(val);
81}
82
83void Stream::write_s32(s32 val) {
84 return write(val);
85}
86
87void Stream::write_s64(s64 val) {
88 return write(val);
89}
90
91void Stream::write_f32(f32 val) {
92 return write(val);
93}
94
95void Stream::write_f64(f64 val) {
96 return write(val);
97}
98
99RamStream::RamStream() : m_buffer(nullptr), m_size(0) {}
100
101RamStream::RamStream(const void *buffer, u32 size) {
102 setBufferAndSize(const_cast<void *>(buffer), size);
103}
104
105void RamStream::read(void *output, u32 size) {
106 u8 *buffer = reinterpret_cast<u8 *>(output);
107 for (size_t i = 0; i < size; ++i) {
108 buffer[i] = m_buffer[m_index + i];
109 }
110}
111
112void RamStream::write(void *input, u32 size) {
113 u8 *buffer = reinterpret_cast<u8 *>(input);
114 for (size_t i = 0; i < size; ++i) {
115 m_buffer[m_index + i] = buffer[i];
116 }
117}
118
119// Expects a null-terminated char array, and moves the index past the null terminator
120std::string RamStream::read_string() {
121 std::string ret(reinterpret_cast<char *>(m_buffer + m_index));
122 m_index += ret.size() + 1;
123 ASSERT(!bad());
124 return ret;
125}
126
127void RamStream::setBufferAndSize(void *buffer, u32 size) {
128 m_buffer = reinterpret_cast<u8 *>(buffer);
129 m_size = size;
130}
131
136RamStream RamStream::split(u32 size) {
137 RamStream stream = RamStream(m_buffer + m_index, size);
138 m_index += size;
139 ASSERT(!bad());
140
141 return stream;
142}
143
144} // namespace EGG
A stream of data stored in memory.
Definition Stream.hh:83
EGG core library.
Definition Archive.cc:6