mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-15 11:03:00 +01:00
Update OrcaStream::Chunkstream methods to new code style
This commit is contained in:
@@ -267,10 +267,10 @@ namespace OpenRCT2
|
||||
private:
|
||||
struct ArrayState
|
||||
{
|
||||
std::streampos StartPos{};
|
||||
std::streampos LastPos{};
|
||||
size_t Count{};
|
||||
size_t ElementSize{};
|
||||
std::streampos startPos{};
|
||||
std::streampos lastPos{};
|
||||
size_t count{};
|
||||
size_t elementSize{};
|
||||
};
|
||||
|
||||
MemoryStream& _buffer;
|
||||
@@ -284,33 +284,33 @@ namespace OpenRCT2
|
||||
{
|
||||
}
|
||||
|
||||
Mode GetMode() const
|
||||
Mode getMode() const
|
||||
{
|
||||
return _mode;
|
||||
}
|
||||
|
||||
MemoryStream& GetStream()
|
||||
MemoryStream& getStream()
|
||||
{
|
||||
return _buffer;
|
||||
}
|
||||
|
||||
void ReadWrite(void* addr, const size_t len)
|
||||
void readWrite(void* addr, const size_t len)
|
||||
{
|
||||
if (_mode == Mode::reading)
|
||||
{
|
||||
ReadBuffer(addr, len);
|
||||
readBuffer(addr, len);
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteBuffer(addr, len);
|
||||
writeBuffer(addr, len);
|
||||
}
|
||||
}
|
||||
|
||||
void Read(void* addr, const size_t len)
|
||||
void read(void* addr, const size_t len)
|
||||
{
|
||||
if (_mode == Mode::reading)
|
||||
{
|
||||
ReadBuffer(addr, len);
|
||||
readBuffer(addr, len);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -318,7 +318,7 @@ namespace OpenRCT2
|
||||
}
|
||||
}
|
||||
|
||||
void Write(const void* addr, const size_t len)
|
||||
void write(const void* addr, const size_t len)
|
||||
{
|
||||
if (_mode == Mode::reading)
|
||||
{
|
||||
@@ -326,195 +326,195 @@ namespace OpenRCT2
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteBuffer(addr, len);
|
||||
writeBuffer(addr, len);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_integral<T>::value, bool> = true>
|
||||
void ReadWrite(T& v)
|
||||
void readWrite(T& v)
|
||||
{
|
||||
if (_mode == Mode::reading)
|
||||
{
|
||||
v = ReadInteger<T>();
|
||||
v = readInteger<T>();
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteInteger(v);
|
||||
writeInteger(v);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T, std::enable_if_t<std::is_enum<T>::value, bool> = true>
|
||||
void ReadWrite(T& v)
|
||||
void readWrite(T& v)
|
||||
{
|
||||
using underlying = typename std::underlying_type<T>::type;
|
||||
if (_mode == Mode::reading)
|
||||
{
|
||||
v = static_cast<T>(ReadInteger<underlying>());
|
||||
v = static_cast<T>(readInteger<underlying>());
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteInteger(static_cast<underlying>(v));
|
||||
writeInteger(static_cast<underlying>(v));
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T, T TNullValue, typename TTag>
|
||||
void ReadWrite(TIdentifier<T, TNullValue, TTag>& value)
|
||||
void readWrite(TIdentifier<T, TNullValue, TTag>& value)
|
||||
{
|
||||
if (_mode == Mode::reading)
|
||||
{
|
||||
T temp{};
|
||||
ReadWrite(temp);
|
||||
readWrite(temp);
|
||||
value = TIdentifier<T, TNullValue, TTag>::FromUnderlying(temp);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto temp = value.ToUnderlying();
|
||||
ReadWrite(temp);
|
||||
readWrite(temp);
|
||||
}
|
||||
}
|
||||
|
||||
void ReadWrite(bool& value)
|
||||
void readWrite(bool& value)
|
||||
{
|
||||
uint8_t value8 = value ? 1 : 0;
|
||||
ReadWrite(&value8, sizeof(value8));
|
||||
readWrite(&value8, sizeof(value8));
|
||||
value = value8 != 0;
|
||||
}
|
||||
|
||||
void ReadWrite(CoordsXY& coords)
|
||||
void readWrite(CoordsXY& coords)
|
||||
{
|
||||
ReadWrite(coords.x);
|
||||
ReadWrite(coords.y);
|
||||
readWrite(coords.x);
|
||||
readWrite(coords.y);
|
||||
}
|
||||
|
||||
void ReadWrite(CoordsXYZ& coords)
|
||||
void readWrite(CoordsXYZ& coords)
|
||||
{
|
||||
ReadWrite(coords.x);
|
||||
ReadWrite(coords.y);
|
||||
ReadWrite(coords.z);
|
||||
readWrite(coords.x);
|
||||
readWrite(coords.y);
|
||||
readWrite(coords.z);
|
||||
}
|
||||
|
||||
void ReadWrite(CoordsXYZD& coords)
|
||||
void readWrite(CoordsXYZD& coords)
|
||||
{
|
||||
ReadWrite(coords.x);
|
||||
ReadWrite(coords.y);
|
||||
ReadWrite(coords.z);
|
||||
ReadWrite(coords.direction);
|
||||
readWrite(coords.x);
|
||||
readWrite(coords.y);
|
||||
readWrite(coords.z);
|
||||
readWrite(coords.direction);
|
||||
}
|
||||
|
||||
void ReadWrite(TileCoordsXY& coords)
|
||||
void readWrite(TileCoordsXY& coords)
|
||||
{
|
||||
ReadWrite(coords.x);
|
||||
ReadWrite(coords.y);
|
||||
readWrite(coords.x);
|
||||
readWrite(coords.y);
|
||||
}
|
||||
|
||||
void ReadWrite(TileCoordsXYZ& coords)
|
||||
void readWrite(TileCoordsXYZ& coords)
|
||||
{
|
||||
ReadWrite(coords.x);
|
||||
ReadWrite(coords.y);
|
||||
ReadWrite(coords.z);
|
||||
readWrite(coords.x);
|
||||
readWrite(coords.y);
|
||||
readWrite(coords.z);
|
||||
}
|
||||
|
||||
void ReadWrite(TileCoordsXYZD& coords)
|
||||
void readWrite(TileCoordsXYZD& coords)
|
||||
{
|
||||
ReadWrite(coords.x);
|
||||
ReadWrite(coords.y);
|
||||
ReadWrite(coords.z);
|
||||
ReadWrite(coords.direction);
|
||||
readWrite(coords.x);
|
||||
readWrite(coords.y);
|
||||
readWrite(coords.z);
|
||||
readWrite(coords.direction);
|
||||
}
|
||||
|
||||
template<typename T, typename = std::enable_if<std::is_integral<T>::value>>
|
||||
T Read()
|
||||
T read()
|
||||
{
|
||||
T v{};
|
||||
ReadWrite(v);
|
||||
readWrite(v);
|
||||
return v;
|
||||
}
|
||||
|
||||
void ReadWrite(std::string& v)
|
||||
void readWrite(std::string& v)
|
||||
{
|
||||
if (_mode == Mode::reading)
|
||||
{
|
||||
v = ReadString();
|
||||
v = readString();
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteString(v);
|
||||
writeString(v);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T, typename = std::enable_if<std::is_integral<T>::value>>
|
||||
void Write(T v)
|
||||
void write(T v)
|
||||
{
|
||||
if (_mode == Mode::reading)
|
||||
{
|
||||
T temp{};
|
||||
ReadWrite(temp);
|
||||
readWrite(temp);
|
||||
}
|
||||
else
|
||||
{
|
||||
ReadWrite(v);
|
||||
readWrite(v);
|
||||
}
|
||||
}
|
||||
|
||||
void Write(const char* v)
|
||||
void write(const char* v)
|
||||
{
|
||||
std::string_view sv;
|
||||
if (v != nullptr)
|
||||
sv = v;
|
||||
Write(sv);
|
||||
write(sv);
|
||||
}
|
||||
|
||||
void Write(const std::string_view v)
|
||||
void write(const std::string_view v)
|
||||
{
|
||||
if (_mode == Mode::reading)
|
||||
{
|
||||
std::string temp;
|
||||
ReadWrite(temp);
|
||||
readWrite(temp);
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteString(v);
|
||||
writeString(v);
|
||||
}
|
||||
}
|
||||
|
||||
void Write(const std::string& v)
|
||||
void write(const std::string& v)
|
||||
{
|
||||
Write(std::string_view(v));
|
||||
write(std::string_view(v));
|
||||
}
|
||||
|
||||
template<typename TVec, typename TFunc>
|
||||
void ReadWriteVector(TVec& vec, TFunc f)
|
||||
void readWriteVector(TVec& vec, TFunc f)
|
||||
{
|
||||
if (_mode == Mode::reading)
|
||||
{
|
||||
const auto count = BeginArray();
|
||||
const auto count = beginArray();
|
||||
vec.clear();
|
||||
for (size_t i = 0; i < count; i++)
|
||||
{
|
||||
auto& el = vec.emplace_back();
|
||||
f(el);
|
||||
NextArrayElement();
|
||||
nextArrayElement();
|
||||
}
|
||||
EndArray();
|
||||
endArray();
|
||||
}
|
||||
else
|
||||
{
|
||||
BeginArray();
|
||||
beginArray();
|
||||
for (auto& el : vec)
|
||||
{
|
||||
f(el);
|
||||
NextArrayElement();
|
||||
nextArrayElement();
|
||||
}
|
||||
EndArray();
|
||||
endArray();
|
||||
}
|
||||
}
|
||||
|
||||
template<typename TArr, typename TFunc>
|
||||
void ReadWriteArray(std::span<TArr> arr, TFunc f)
|
||||
void readWriteArray(std::span<TArr> arr, TFunc f)
|
||||
{
|
||||
if (_mode == Mode::reading)
|
||||
{
|
||||
const auto count = BeginArray();
|
||||
const auto count = beginArray();
|
||||
for (auto& el : arr)
|
||||
{
|
||||
el = {};
|
||||
@@ -525,69 +525,69 @@ namespace OpenRCT2
|
||||
{
|
||||
f(arr[i]);
|
||||
}
|
||||
NextArrayElement();
|
||||
nextArrayElement();
|
||||
}
|
||||
EndArray();
|
||||
endArray();
|
||||
}
|
||||
else
|
||||
{
|
||||
BeginArray();
|
||||
beginArray();
|
||||
for (auto& el : arr)
|
||||
{
|
||||
if (f(el))
|
||||
{
|
||||
NextArrayElement();
|
||||
nextArrayElement();
|
||||
}
|
||||
}
|
||||
EndArray();
|
||||
endArray();
|
||||
}
|
||||
}
|
||||
|
||||
template<typename TArr, size_t TArrSize, typename TFunc>
|
||||
void ReadWriteArray(TArr (&arr)[TArrSize], TFunc f)
|
||||
void readWriteArray(TArr (&arr)[TArrSize], TFunc f)
|
||||
{
|
||||
ReadWriteArray(std::span<TArr>{ arr, TArrSize }, f);
|
||||
readWriteArray(std::span<TArr>{ arr, TArrSize }, f);
|
||||
}
|
||||
|
||||
template<typename TArr, size_t TArrSize, typename TFunc>
|
||||
void ReadWriteArray(std::array<TArr, TArrSize>& arr, TFunc f)
|
||||
void readWriteArray(std::array<TArr, TArrSize>& arr, TFunc f)
|
||||
{
|
||||
ReadWriteArray(std::span<TArr>{ arr.begin(), arr.end() }, f);
|
||||
readWriteArray(std::span<TArr>{ arr.begin(), arr.end() }, f);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void Ignore()
|
||||
void ignore()
|
||||
{
|
||||
T value{};
|
||||
ReadWrite(value);
|
||||
readWrite(value);
|
||||
}
|
||||
|
||||
private:
|
||||
void ReadBuffer(void* dst, const size_t len)
|
||||
void readBuffer(void* dst, const size_t len)
|
||||
{
|
||||
_buffer.Read(dst, len);
|
||||
}
|
||||
|
||||
void WriteBuffer(const void* buffer, const size_t len)
|
||||
void writeBuffer(const void* buffer, const size_t len)
|
||||
{
|
||||
_buffer.Write(buffer, len);
|
||||
}
|
||||
|
||||
template<typename T, typename = std::enable_if<std::is_integral<T>::value>>
|
||||
T ReadInteger()
|
||||
T readInteger()
|
||||
{
|
||||
if constexpr (sizeof(T) > 4)
|
||||
{
|
||||
if constexpr (std::is_signed<T>())
|
||||
{
|
||||
int64_t raw{};
|
||||
Read(&raw, sizeof(raw));
|
||||
read(&raw, sizeof(raw));
|
||||
return static_cast<T>(raw);
|
||||
}
|
||||
else
|
||||
{
|
||||
uint64_t raw{};
|
||||
Read(&raw, sizeof(raw));
|
||||
read(&raw, sizeof(raw));
|
||||
return static_cast<T>(raw);
|
||||
}
|
||||
}
|
||||
@@ -596,7 +596,7 @@ namespace OpenRCT2
|
||||
if constexpr (std::is_signed<T>())
|
||||
{
|
||||
int32_t raw{};
|
||||
Read(&raw, sizeof(raw));
|
||||
read(&raw, sizeof(raw));
|
||||
if (raw < std::numeric_limits<T>::min() || raw > std::numeric_limits<T>::max())
|
||||
{
|
||||
throw std::runtime_error("Value is incompatible with internal type.");
|
||||
@@ -606,7 +606,7 @@ namespace OpenRCT2
|
||||
else
|
||||
{
|
||||
uint32_t raw{};
|
||||
Read(&raw, sizeof(raw));
|
||||
read(&raw, sizeof(raw));
|
||||
if (raw > std::numeric_limits<T>::max())
|
||||
{
|
||||
throw std::runtime_error("Value is incompatible with internal type.");
|
||||
@@ -617,19 +617,19 @@ namespace OpenRCT2
|
||||
}
|
||||
|
||||
template<typename T, typename = std::enable_if<std::is_integral<T>::value>>
|
||||
void WriteInteger(const T value)
|
||||
void writeInteger(const T value)
|
||||
{
|
||||
if constexpr (sizeof(T) > 4)
|
||||
{
|
||||
if constexpr (std::is_signed<T>())
|
||||
{
|
||||
auto raw = static_cast<int64_t>(value);
|
||||
Write(&raw, sizeof(raw));
|
||||
write(&raw, sizeof(raw));
|
||||
}
|
||||
else
|
||||
{
|
||||
auto raw = static_cast<uint64_t>(value);
|
||||
Write(&raw, sizeof(raw));
|
||||
write(&raw, sizeof(raw));
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -637,23 +637,23 @@ namespace OpenRCT2
|
||||
if constexpr (std::is_signed<T>())
|
||||
{
|
||||
auto raw = static_cast<int32_t>(value);
|
||||
Write(&raw, sizeof(raw));
|
||||
write(&raw, sizeof(raw));
|
||||
}
|
||||
else
|
||||
{
|
||||
auto raw = static_cast<uint32_t>(value);
|
||||
Write(&raw, sizeof(raw));
|
||||
write(&raw, sizeof(raw));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string ReadString()
|
||||
std::string readString()
|
||||
{
|
||||
std::string buffer;
|
||||
while (true)
|
||||
{
|
||||
char c{};
|
||||
ReadBuffer(&c, sizeof(c));
|
||||
readBuffer(&c, sizeof(c));
|
||||
if (c == '\0')
|
||||
{
|
||||
break;
|
||||
@@ -663,7 +663,7 @@ namespace OpenRCT2
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void WriteString(const std::string_view s)
|
||||
void writeString(const std::string_view s)
|
||||
{
|
||||
const char nullt = '\0';
|
||||
auto len = s.find('\0');
|
||||
@@ -675,74 +675,74 @@ namespace OpenRCT2
|
||||
_buffer.Write(&nullt, sizeof(nullt));
|
||||
}
|
||||
|
||||
size_t BeginArray()
|
||||
size_t beginArray()
|
||||
{
|
||||
auto& arrayState = _arrayStack.emplace();
|
||||
if (_mode == Mode::reading)
|
||||
{
|
||||
arrayState.Count = Read<uint32_t>();
|
||||
arrayState.ElementSize = Read<uint32_t>();
|
||||
arrayState.LastPos = _buffer.GetPosition();
|
||||
return arrayState.Count;
|
||||
arrayState.count = read<uint32_t>();
|
||||
arrayState.elementSize = read<uint32_t>();
|
||||
arrayState.lastPos = _buffer.GetPosition();
|
||||
return arrayState.count;
|
||||
}
|
||||
|
||||
arrayState.Count = 0;
|
||||
arrayState.ElementSize = 0;
|
||||
arrayState.StartPos = _buffer.GetPosition();
|
||||
Write<uint32_t>(0);
|
||||
Write<uint32_t>(0);
|
||||
arrayState.LastPos = _buffer.GetPosition();
|
||||
arrayState.count = 0;
|
||||
arrayState.elementSize = 0;
|
||||
arrayState.startPos = _buffer.GetPosition();
|
||||
write<uint32_t>(0);
|
||||
write<uint32_t>(0);
|
||||
arrayState.lastPos = _buffer.GetPosition();
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool NextArrayElement()
|
||||
bool nextArrayElement()
|
||||
{
|
||||
auto& arrayState = _arrayStack.top();
|
||||
if (_mode == Mode::reading)
|
||||
{
|
||||
if (arrayState.Count == 0)
|
||||
if (arrayState.count == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (arrayState.ElementSize != 0)
|
||||
if (arrayState.elementSize != 0)
|
||||
{
|
||||
arrayState.LastPos += arrayState.ElementSize;
|
||||
_buffer.SetPosition(arrayState.LastPos);
|
||||
arrayState.lastPos += arrayState.elementSize;
|
||||
_buffer.SetPosition(arrayState.lastPos);
|
||||
}
|
||||
arrayState.Count--;
|
||||
return arrayState.Count == 0;
|
||||
arrayState.count--;
|
||||
return arrayState.count == 0;
|
||||
}
|
||||
|
||||
const auto lastElSize = static_cast<size_t>(_buffer.GetPosition()) - arrayState.LastPos;
|
||||
if (arrayState.Count == 0)
|
||||
const auto lastElSize = static_cast<size_t>(_buffer.GetPosition()) - arrayState.lastPos;
|
||||
if (arrayState.count == 0)
|
||||
{
|
||||
// Set array element size based on first element size
|
||||
arrayState.ElementSize = lastElSize;
|
||||
arrayState.elementSize = lastElSize;
|
||||
}
|
||||
else if (arrayState.ElementSize != lastElSize)
|
||||
else if (arrayState.elementSize != lastElSize)
|
||||
{
|
||||
// Array element size was different from first element so reset it
|
||||
// to dynamic
|
||||
arrayState.ElementSize = 0;
|
||||
arrayState.elementSize = 0;
|
||||
}
|
||||
arrayState.Count++;
|
||||
arrayState.LastPos = _buffer.GetPosition();
|
||||
arrayState.count++;
|
||||
arrayState.lastPos = _buffer.GetPosition();
|
||||
return true;
|
||||
}
|
||||
|
||||
void EndArray()
|
||||
void endArray()
|
||||
{
|
||||
auto& arrayState = _arrayStack.top();
|
||||
if (_mode == Mode::writing)
|
||||
{
|
||||
const size_t backupPos = _buffer.GetPosition();
|
||||
if (backupPos != static_cast<size_t>(arrayState.StartPos) + 8 && arrayState.Count == 0)
|
||||
if (backupPos != static_cast<size_t>(arrayState.startPos) + 8 && arrayState.count == 0)
|
||||
{
|
||||
throw std::runtime_error("Array data was written but no elements were added.");
|
||||
}
|
||||
_buffer.SetPosition(arrayState.StartPos);
|
||||
Write(static_cast<uint32_t>(arrayState.Count));
|
||||
Write(static_cast<uint32_t>(arrayState.ElementSize));
|
||||
_buffer.SetPosition(arrayState.startPos);
|
||||
write(static_cast<uint32_t>(arrayState.count));
|
||||
write(static_cast<uint32_t>(arrayState.elementSize));
|
||||
_buffer.SetPosition(backupPos);
|
||||
}
|
||||
_arrayStack.pop();
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user