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