From 3b607401288b25cf099167cd8d155206d83d2e7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sat, 25 Jul 2020 09:37:35 +0200 Subject: [PATCH] Add int64_t support to INI parser (#12374) --- src/openrct2/config/IniReader.cpp | 22 ++++++++++++++++++++++ src/openrct2/config/IniReader.hpp | 1 + src/openrct2/config/IniWriter.cpp | 5 +++++ src/openrct2/config/IniWriter.hpp | 1 + test/tests/IniReaderTest.cpp | 2 ++ 5 files changed, 31 insertions(+) diff --git a/src/openrct2/config/IniReader.cpp b/src/openrct2/config/IniReader.cpp index 45ac160a41..a4c8f580a4 100644 --- a/src/openrct2/config/IniReader.cpp +++ b/src/openrct2/config/IniReader.cpp @@ -155,6 +155,23 @@ public: return result; } + int64_t GetInt64(const std::string& name, int64_t defaultValue) const override + { + int64_t result = defaultValue; + std::string value; + if (TryGetString(name, &value)) + { + try + { + result = std::stoll(value); + } + catch (const std::exception&) + { + } + } + return result; + } + float GetFloat(const std::string& name, float defaultValue) const override { float result = defaultValue; @@ -388,6 +405,11 @@ public: return defaultValue; } + int64_t GetInt64([[maybe_unused]] const std::string& name, int64_t defaultValue) const override + { + return defaultValue; + } + float GetFloat([[maybe_unused]] const std::string& name, float defaultValue) const override { return defaultValue; diff --git a/src/openrct2/config/IniReader.hpp b/src/openrct2/config/IniReader.hpp index f8bc7e0445..b8c272b3dc 100644 --- a/src/openrct2/config/IniReader.hpp +++ b/src/openrct2/config/IniReader.hpp @@ -24,6 +24,7 @@ interface IIniReader virtual bool GetBoolean(const std::string& name, bool defaultValue) const abstract; virtual int32_t GetInt32(const std::string& name, int32_t defaultValue) const abstract; + virtual int64_t GetInt64(const std::string& name, int64_t defaultValue) const abstract; virtual float GetFloat(const std::string& name, float defaultValue) const abstract; virtual std::string GetString(const std::string& name, const std::string& defaultValue) const abstract; virtual bool TryGetString(const std::string& name, std::string* outValue) const abstract; diff --git a/src/openrct2/config/IniWriter.cpp b/src/openrct2/config/IniWriter.cpp index 4b1a2c7f0e..040cf9d62a 100644 --- a/src/openrct2/config/IniWriter.cpp +++ b/src/openrct2/config/IniWriter.cpp @@ -48,6 +48,11 @@ public: WriteProperty(name, std::to_string(value)); } + void WriteInt64(const std::string& name, int64_t value) override + { + WriteProperty(name, std::to_string(value)); + } + void WriteFloat(const std::string& name, float value) override { WriteProperty(name, std::to_string(value)); diff --git a/src/openrct2/config/IniWriter.hpp b/src/openrct2/config/IniWriter.hpp index 3a9aca801f..0329503423 100644 --- a/src/openrct2/config/IniWriter.hpp +++ b/src/openrct2/config/IniWriter.hpp @@ -24,6 +24,7 @@ interface IIniWriter virtual void WriteBoolean(const std::string& name, bool value) abstract; virtual void WriteInt32(const std::string& name, int32_t value) abstract; + virtual void WriteInt64(const std::string& name, int64_t value) abstract; virtual void WriteFloat(const std::string& name, float value) abstract; virtual void WriteString(const std::string& name, const std::string& value) abstract; virtual void WriteEnum(const std::string& name, const std::string& key) abstract; diff --git a/test/tests/IniReaderTest.cpp b/test/tests/IniReaderTest.cpp index b8449d52ab..93e092a746 100644 --- a/test/tests/IniReaderTest.cpp +++ b/test/tests/IniReaderTest.cpp @@ -39,6 +39,8 @@ TEST_F(IniReaderTest, create_empty) ASSERT_EQ(ir->GetEnum("spanish", 12345, Enum_Currency), 12345); ASSERT_EQ(ir->GetFloat("inquisition", 1.234f), 1.234f); ASSERT_EQ(ir->GetInt32("universal_answer", 42), 42); + ASSERT_EQ( + ir->GetInt64("heat_death_of_the_universe", std::numeric_limits::max()), std::numeric_limits::max()); delete ir; }