From 3df551ffbf15aeb11a0a4d0c95c12d462ab6d361 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sun, 10 Dec 2023 19:33:50 +0100 Subject: [PATCH] Move RCT2::GetRCTStringBufferLen to RCT12 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It’s used in both --- src/openrct2/rct1/S4Importer.cpp | 2 +- src/openrct2/rct12/RCT12.cpp | 32 ++++++++++++++++++++++++++++++++ src/openrct2/rct12/RCT12.h | 9 +++++++++ src/openrct2/rct2/RCT2.cpp | 29 ----------------------------- src/openrct2/rct2/RCT2.h | 6 ------ src/openrct2/rct2/S6Importer.cpp | 2 +- 6 files changed, 43 insertions(+), 37 deletions(-) diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 63c8f13a3e..f65ca39816 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -2473,7 +2473,7 @@ namespace RCT1 { const auto originalString = _s4.StringTable[stringId % 1024]; auto originalStringView = std::string_view( - originalString, RCT2::GetRCT2StringBufferLen(originalString, USER_STRING_MAX_LENGTH)); + originalString, RCT12::GetRCTStringBufferLen(originalString, USER_STRING_MAX_LENGTH)); auto asUtf8 = RCT2StringToUTF8(originalStringView, RCT2LanguageId::EnglishUK); auto justText = RCT12RemoveFormattingUTF8(asUtf8); return justText.data(); diff --git a/src/openrct2/rct12/RCT12.cpp b/src/openrct2/rct12/RCT12.cpp index f302e5c525..4877514d8d 100644 --- a/src/openrct2/rct12/RCT12.cpp +++ b/src/openrct2/rct12/RCT12.cpp @@ -924,3 +924,35 @@ uint8_t ConvertToTD46Flags(const TrackDesignTrackElement& source) return trackFlags; } + +namespace RCT12 +{ + size_t GetRCTStringBufferLen(const char* buffer, size_t maxBufferLen) + { + constexpr char MULTIBYTE = static_cast(255); + size_t len = 0; + for (size_t i = 0; i < maxBufferLen; i++) + { + auto ch = buffer[i]; + if (ch == MULTIBYTE) + { + i += 2; + + // Check if reading two more bytes exceeds max buffer len + if (i < maxBufferLen) + { + len += 3; + } + } + else if (ch == '\0') + { + break; + } + else + { + len++; + } + } + return len; + } +} // namespace RCT12 diff --git a/src/openrct2/rct12/RCT12.h b/src/openrct2/rct12/RCT12.h index 260fd76381..ee48e7a1ca 100644 --- a/src/openrct2/rct12/RCT12.h +++ b/src/openrct2/rct12/RCT12.h @@ -914,3 +914,12 @@ enum class TD46Flags : uint8_t void ConvertFromTD46Flags(TrackDesignTrackElement& target, uint8_t flags); uint8_t ConvertToTD46Flags(const TrackDesignTrackElement& source); + +namespace RCT12 +{ + /** + * Iterates an RCT string buffer and returns the length of the string in bytes. + * Handles single and multi-byte strings. + */ + size_t GetRCTStringBufferLen(const char* buffer, size_t maxBufferLen); +} // namespace RCT12 diff --git a/src/openrct2/rct2/RCT2.cpp b/src/openrct2/rct2/RCT2.cpp index 9f7a442bf8..b111c81749 100644 --- a/src/openrct2/rct2/RCT2.cpp +++ b/src/openrct2/rct2/RCT2.cpp @@ -87,35 +87,6 @@ namespace RCT2 } } - size_t GetRCT2StringBufferLen(const char* buffer, size_t maxBufferLen) - { - constexpr char MULTIBYTE = static_cast(255); - size_t len = 0; - for (size_t i = 0; i < maxBufferLen; i++) - { - auto ch = buffer[i]; - if (ch == MULTIBYTE) - { - i += 2; - - // Check if reading two more bytes exceeds max buffer len - if (i < maxBufferLen) - { - len += 3; - } - } - else if (ch == '\0') - { - break; - } - else - { - len++; - } - } - return len; - } - uint8_t Ride::GetMinCarsPerTrain() const { return MinMaxCarsPerTrain >> 4; diff --git a/src/openrct2/rct2/RCT2.h b/src/openrct2/rct2/RCT2.h index fb44885efe..6ab45fb4d7 100644 --- a/src/openrct2/rct2/RCT2.h +++ b/src/openrct2/rct2/RCT2.h @@ -1048,12 +1048,6 @@ namespace RCT2 track_type_t RCT2TrackTypeToOpenRCT2(RCT12TrackType origTrackType, ride_type_t rideType, bool convertFlat); RCT12TrackType OpenRCT2TrackTypeToRCT2(track_type_t origTrackType); - /** - * Iterates an RCT2 string buffer and returns the length of the string in bytes. - * Handles single and multi-byte strings. - */ - size_t GetRCT2StringBufferLen(const char* buffer, size_t maxBufferLen); - struct FootpathMapping { std::string_view Original; diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index 69bf0235be..3c18185470 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -2327,7 +2327,7 @@ namespace RCT2 { const auto originalString = _s6.CustomStrings[stringId % 1024]; auto originalStringView = std::string_view( - originalString, GetRCT2StringBufferLen(originalString, USER_STRING_MAX_LENGTH)); + originalString, RCT12::GetRCTStringBufferLen(originalString, USER_STRING_MAX_LENGTH)); auto asUtf8 = RCT2StringToUTF8(originalStringView, RCT2LanguageId::EnglishUK); auto justText = RCT12RemoveFormattingUTF8(asUtf8); return justText.data();