From eebababa90b2d708d3f518faabe17fe201ce9882 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 12 Oct 2020 21:57:43 +0100 Subject: [PATCH] Use variant instead of any --- src/openrct2/localisation/Formatting.cpp | 30 ++++++++++++------------ src/openrct2/localisation/Formatting.h | 7 +++--- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/openrct2/localisation/Formatting.cpp b/src/openrct2/localisation/Formatting.cpp index 7d9b972648..051bf4bcea 100644 --- a/src/openrct2/localisation/Formatting.cpp +++ b/src/openrct2/localisation/Formatting.cpp @@ -515,19 +515,19 @@ namespace OpenRCT2 return stringLen; } - void FormatArgumentAny(std::stringstream& ss, FormatToken token, const std::any& value) + void FormatArgumentAny(std::stringstream& ss, FormatToken token, const FormatArg_t& value) { - if (value.type() == typeid(uint16_t)) + if (std::holds_alternative(value)) { - FormatArgument(ss, token, std::any_cast(value)); + FormatArgument(ss, token, std::get(value)); } - else if (value.type() == typeid(int32_t)) + else if (std::holds_alternative(value)) { - FormatArgument(ss, token, std::any_cast(value)); + FormatArgument(ss, token, std::get(value)); } - else if (value.type() == typeid(const char*)) + else if (std::holds_alternative(value)) { - FormatArgument(ss, token, std::any_cast(value)); + FormatArgument(ss, token, std::get(value)); } else { @@ -536,7 +536,7 @@ namespace OpenRCT2 } static void FormatStringAny( - std::stringstream& ss, const FmtString& fmt, const std::vector& args, size_t& argIndex) + std::stringstream& ss, const FmtString& fmt, const std::vector& args, size_t& argIndex) { for (const auto& token : fmt) { @@ -544,10 +544,10 @@ namespace OpenRCT2 { if (argIndex < args.size()) { - auto arg = args[argIndex++]; - if (arg.type() == typeid(rct_string_id)) + const auto& arg = args[argIndex++]; + if (auto stringid = std::get_if(&arg)) { - auto subfmt = GetFmtStringById(std::any_cast(arg)); + auto subfmt = GetFmtStringById(*stringid); FormatStringAny(ss, subfmt, args, argIndex); } } @@ -571,7 +571,7 @@ namespace OpenRCT2 } } - std::string FormatStringAny(const FmtString& fmt, const std::vector& args) + std::string FormatStringAny(const FmtString& fmt, const std::vector& args) { auto& ss = GetThreadFormatStream(); size_t argIndex = 0; @@ -579,7 +579,7 @@ namespace OpenRCT2 return ss.str(); } - size_t FormatStringAny(char* buffer, size_t bufferLen, const FmtString& fmt, const std::vector& args) + size_t FormatStringAny(char* buffer, size_t bufferLen, const FmtString& fmt, const std::vector& args) { auto& ss = GetThreadFormatStream(); size_t argIndex = 0; @@ -595,7 +595,7 @@ namespace OpenRCT2 return value; } - static void BuildAnyArgListFromLegacyArgBuffer(const FmtString& fmt, std::vector& anyArgs, const void* args) + static void BuildAnyArgListFromLegacyArgBuffer(const FmtString& fmt, std::vector& anyArgs, const void* args) { for (const auto& t : fmt) { @@ -645,7 +645,7 @@ namespace OpenRCT2 size_t FormatStringLegacy(char* buffer, size_t bufferLen, rct_string_id id, const void* args) { - std::vector anyArgs; + std::vector anyArgs; auto fmt = GetFmtStringById(id); BuildAnyArgListFromLegacyArgBuffer(fmt, anyArgs, args); return FormatStringAny(buffer, bufferLen, fmt, anyArgs); diff --git a/src/openrct2/localisation/Formatting.h b/src/openrct2/localisation/Formatting.h index 727d371738..19b760c7bf 100644 --- a/src/openrct2/localisation/Formatting.h +++ b/src/openrct2/localisation/Formatting.h @@ -13,17 +13,18 @@ #include "FormatCodes.h" #include "Language.h" -#include #include #include #include #include #include +#include #include namespace OpenRCT2 { using FormatToken = uint32_t; + using FormatArg_t = std::variant; class FmtString { @@ -163,7 +164,7 @@ namespace OpenRCT2 return CopyStringStreamToBuffer(buffer, bufferLen, ss); } - std::string FormatStringAny(const FmtString& fmt, const std::vector& args); - size_t FormatStringAny(char* buffer, size_t bufferLen, const FmtString& fmt, const std::vector& args); + std::string FormatStringAny(const FmtString& fmt, const std::vector& args); + size_t FormatStringAny(char* buffer, size_t bufferLen, const FmtString& fmt, const std::vector& args); size_t FormatStringLegacy(char* buffer, size_t bufferLen, rct_string_id id, const void* args); } // namespace OpenRCT2