From ee9ede6c330f11c12bb7955d7f9ff413d436ee4d Mon Sep 17 00:00:00 2001 From: duncanspumpkin Date: Sun, 6 Dec 2020 16:54:29 +0000 Subject: [PATCH] Use dataserialiser to simplify object repo code --- src/openrct2/object/ObjectRepository.cpp | 87 ++++++------------------ 1 file changed, 22 insertions(+), 65 deletions(-) diff --git a/src/openrct2/object/ObjectRepository.cpp b/src/openrct2/object/ObjectRepository.cpp index f79e16edd0..3ea859a5c4 100644 --- a/src/openrct2/object/ObjectRepository.cpp +++ b/src/openrct2/object/ObjectRepository.cpp @@ -128,46 +128,25 @@ public: protected: void Serialise(IStream* stream, const ObjectRepositoryItem& item) const override { - stream->WriteString(item.Identifier); - stream->WriteValue(item.ObjectEntry); - stream->WriteString(item.Path); - stream->WriteString(item.Name); + DataSerialiser serialiser(true, *stream); + serialiser << item.Identifier; + serialiser << item.ObjectEntry; + serialiser << item.Path; + serialiser << item.Name; - uint8_t sourceLength = static_cast(item.Sources.size()); - stream->WriteValue(sourceLength); - for (auto source : item.Sources) - { - stream->WriteValue(source); - } - - uint8_t authorsLength = static_cast(item.Authors.size()); - stream->WriteValue(authorsLength); - for (const auto& author : item.Authors) - { - stream->WriteString(author); - } + serialiser << item.Sources; + serialiser << item.Authors; switch (item.ObjectEntry.GetType()) { case ObjectType::Ride: - stream->WriteValue(item.RideInfo.RideFlags); - for (int32_t i = 0; i < MAX_CATEGORIES_PER_RIDE; i++) - { - stream->WriteValue(item.RideInfo.RideCategory[i]); - } - for (int32_t i = 0; i < MAX_RIDE_TYPES_PER_RIDE_ENTRY; i++) - { - stream->WriteValue(item.RideInfo.RideType[i]); - } + serialiser << item.RideInfo.RideFlags; + serialiser << item.RideInfo.RideCategory; + serialiser << item.RideInfo.RideType; break; case ObjectType::SceneryGroup: { - stream->WriteValue(static_cast(item.SceneryGroupInfo.Entries.size())); - DataSerialiser serialiser(true, *stream); - for (const auto& entry : item.SceneryGroupInfo.Entries) - { - serialiser << entry; - } + serialiser << item.SceneryGroupInfo.Entries; break; } default: @@ -179,48 +158,26 @@ protected: ObjectRepositoryItem Deserialise(IStream* stream) const override { ObjectRepositoryItem item; + DataSerialiser serialiser(false, *stream); - item.Identifier = stream->ReadStdString(); - item.ObjectEntry = stream->ReadValue(); - item.Path = stream->ReadStdString(); - item.Name = stream->ReadStdString(); + serialiser << item.Identifier; + serialiser << item.ObjectEntry; + serialiser << item.Path; + serialiser << item.Name; - auto sourceLength = stream->ReadValue(); - for (size_t i = 0; i < sourceLength; i++) - { - auto value = stream->ReadValue(); - item.Sources.push_back(static_cast(value)); - } - - auto authorsLength = stream->ReadValue(); - for (size_t i = 0; i < authorsLength; i++) - { - auto author = stream->ReadStdString(); - item.Authors.emplace_back(author); - } + serialiser << item.Sources; + serialiser << item.Authors; switch (item.ObjectEntry.GetType()) { case ObjectType::Ride: - item.RideInfo.RideFlags = stream->ReadValue(); - for (int32_t i = 0; i < MAX_CATEGORIES_PER_RIDE; i++) - { - item.RideInfo.RideCategory[i] = stream->ReadValue(); - } - for (int32_t i = 0; i < MAX_RIDE_TYPES_PER_RIDE_ENTRY; i++) - { - item.RideInfo.RideType[i] = stream->ReadValue(); - } + serialiser << item.RideInfo.RideFlags; + serialiser << item.RideInfo.RideCategory; + serialiser << item.RideInfo.RideType; break; case ObjectType::SceneryGroup: { - auto numEntries = stream->ReadValue(); - item.SceneryGroupInfo.Entries = std::vector(numEntries); - DataSerialiser serialiser(false, *stream); - for (size_t i = 0; i < numEntries; i++) - { - serialiser << item.SceneryGroupInfo.Entries[i]; - } + serialiser << item.SceneryGroupInfo.Entries; break; } default: