1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-14 19:42:38 +01:00

Create std::unique_ptr<ILanguagePack>instead of raw pointer

This commit is contained in:
Hielke Morsink
2021-08-20 23:47:16 +02:00
parent cef26400cf
commit be4159f9ac
4 changed files with 16 additions and 19 deletions

View File

@@ -20,6 +20,7 @@
#include "Localisation.h" #include "Localisation.h"
#include <algorithm> #include <algorithm>
#include <memory>
#include <string> #include <string>
#include <vector> #include <vector>
@@ -62,7 +63,7 @@ private:
ScenarioOverride* _currentScenarioOverride = nullptr; ScenarioOverride* _currentScenarioOverride = nullptr;
public: public:
static LanguagePack* FromFile(uint16_t id, const utf8* path) static std::unique_ptr<LanguagePack> FromFile(uint16_t id, const utf8* path)
{ {
Guard::ArgumentNotNull(path); Guard::ArgumentNotNull(path);
@@ -90,15 +91,15 @@ public:
} }
// Parse the memory as text // Parse the memory as text
LanguagePack* result = FromText(id, fileData); auto result = FromText(id, fileData);
Memory::Free(fileData); Memory::Free(fileData);
return result; return result;
} }
static LanguagePack* FromText(uint16_t id, const utf8* text) static std::unique_ptr<LanguagePack> FromText(uint16_t id, const utf8* text)
{ {
return new LanguagePack(id, text); return std::make_unique<LanguagePack>(id, text);
} }
LanguagePack(uint16_t id, const utf8* text) LanguagePack(uint16_t id, const utf8* text)
@@ -579,13 +580,13 @@ private:
namespace LanguagePackFactory namespace LanguagePackFactory
{ {
ILanguagePack* FromFile(uint16_t id, const utf8* path) std::unique_ptr<ILanguagePack> FromFile(uint16_t id, const utf8* path)
{ {
auto languagePack = LanguagePack::FromFile(id, path); auto languagePack = LanguagePack::FromFile(id, path);
return languagePack; return languagePack;
} }
ILanguagePack* FromText(uint16_t id, const utf8* text) std::unique_ptr<ILanguagePack> FromText(uint16_t id, const utf8* text)
{ {
auto languagePack = LanguagePack::FromText(id, text); auto languagePack = LanguagePack::FromText(id, text);
return languagePack; return languagePack;

View File

@@ -11,6 +11,7 @@
#include "../common.h" #include "../common.h"
#include <memory>
#include <string> #include <string>
#include <string_view> #include <string_view>
@@ -30,6 +31,6 @@ struct ILanguagePack
namespace LanguagePackFactory namespace LanguagePackFactory
{ {
ILanguagePack* FromFile(uint16_t id, const utf8* path); std::unique_ptr<ILanguagePack> FromFile(uint16_t id, const utf8* path);
ILanguagePack* FromText(uint16_t id, const utf8* text); std::unique_ptr<ILanguagePack> FromText(uint16_t id, const utf8* text);
} // namespace LanguagePackFactory } // namespace LanguagePackFactory

View File

@@ -86,12 +86,11 @@ void LocalisationService::OpenLanguage(int32_t id)
if (id != LANGUAGE_ENGLISH_UK) if (id != LANGUAGE_ENGLISH_UK)
{ {
filename = GetLanguagePath(LANGUAGE_ENGLISH_UK); filename = GetLanguagePath(LANGUAGE_ENGLISH_UK);
_languageFallback = std::unique_ptr<ILanguagePack>( _languageFallback = LanguagePackFactory::FromFile(LANGUAGE_ENGLISH_UK, filename.c_str());
LanguagePackFactory::FromFile(LANGUAGE_ENGLISH_UK, filename.c_str()));
} }
filename = GetLanguagePath(id); filename = GetLanguagePath(id);
_languageCurrent = std::unique_ptr<ILanguagePack>(LanguagePackFactory::FromFile(id, filename.c_str())); _languageCurrent = LanguagePackFactory::FromFile(id, filename.c_str());
if (_languageCurrent != nullptr) if (_languageCurrent != nullptr)
{ {
_currentLanguage = id; _currentLanguage = id;

View File

@@ -23,27 +23,25 @@ protected:
TEST_F(LanguagePackTest, create_empty) TEST_F(LanguagePackTest, create_empty)
{ {
ILanguagePack* empty = LanguagePackFactory::FromText(0, ""); auto empty = LanguagePackFactory::FromText(0, "");
ASSERT_EQ(empty->GetId(), 0); ASSERT_EQ(empty->GetId(), 0);
ASSERT_EQ(empty->GetCount(), 0U); ASSERT_EQ(empty->GetCount(), 0U);
delete empty;
} }
TEST_F(LanguagePackTest, create_mutable_id_1) TEST_F(LanguagePackTest, create_mutable_id_1)
{ {
ILanguagePack* lang = LanguagePackFactory::FromText(1, "STR_0000:\n"); auto lang = LanguagePackFactory::FromText(1, "STR_0000:\n");
ASSERT_EQ(lang->GetId(), 1); ASSERT_EQ(lang->GetId(), 1);
ASSERT_EQ(lang->GetCount(), 1U); ASSERT_EQ(lang->GetCount(), 1U);
ASSERT_STREQ(lang->GetString(0), nullptr); ASSERT_STREQ(lang->GetString(0), nullptr);
lang->SetString(0, "xx"); lang->SetString(0, "xx");
ASSERT_EQ(lang->GetCount(), 1U); ASSERT_EQ(lang->GetCount(), 1U);
ASSERT_STREQ(lang->GetString(0), "xx"); ASSERT_STREQ(lang->GetString(0), "xx");
delete lang;
} }
TEST_F(LanguagePackTest, language_pack_simple) TEST_F(LanguagePackTest, language_pack_simple)
{ {
ILanguagePack* lang = LanguagePackFactory::FromText(0, LanguageEnGB); auto lang = LanguagePackFactory::FromText(0, LanguageEnGB);
ASSERT_EQ(lang->GetId(), 0); ASSERT_EQ(lang->GetId(), 0);
ASSERT_EQ(lang->GetCount(), 4U); ASSERT_EQ(lang->GetCount(), 4U);
ASSERT_STREQ(lang->GetString(2), "Spiral Roller Coaster"); ASSERT_STREQ(lang->GetString(2), "Spiral Roller Coaster");
@@ -55,12 +53,11 @@ TEST_F(LanguagePackTest, language_pack_simple)
ASSERT_EQ(lang->GetString(1000), nullptr); ASSERT_EQ(lang->GetString(1000), nullptr);
ASSERT_EQ(lang->GetScenarioOverrideStringId("No such park", 0), STR_NONE); ASSERT_EQ(lang->GetScenarioOverrideStringId("No such park", 0), STR_NONE);
ASSERT_EQ(lang->GetObjectOverrideStringId(" ", 0), STR_NONE); ASSERT_EQ(lang->GetObjectOverrideStringId(" ", 0), STR_NONE);
delete lang;
} }
TEST_F(LanguagePackTest, language_pack_multibyte) TEST_F(LanguagePackTest, language_pack_multibyte)
{ {
ILanguagePack* lang = LanguagePackFactory::FromText(0, (const utf8*)LanguageZhTW); auto lang = LanguagePackFactory::FromText(0, (const utf8*)LanguageZhTW);
ASSERT_EQ(lang->GetId(), 0); ASSERT_EQ(lang->GetId(), 0);
ASSERT_EQ(lang->GetCount(), 4U); ASSERT_EQ(lang->GetCount(), 4U);
ASSERT_STREQ(lang->GetString(2), u8"懸吊式雲霄飛車"); ASSERT_STREQ(lang->GetString(2), u8"懸吊式雲霄飛車");
@@ -70,7 +67,6 @@ TEST_F(LanguagePackTest, language_pack_multibyte)
ASSERT_STREQ(lang->GetString(0x7002), u8"在隱藏於森林深處的清空範圍中, 建造一個很受歡迎的樂園"); ASSERT_STREQ(lang->GetString(0x7002), u8"在隱藏於森林深處的清空範圍中, 建造一個很受歡迎的樂園");
ASSERT_EQ(lang->GetObjectOverrideStringId("CONDORRD", 0), 0x6000); ASSERT_EQ(lang->GetObjectOverrideStringId("CONDORRD", 0), 0x6000);
ASSERT_STREQ(lang->GetString(0x6000), u8"神鷹暢遊"); ASSERT_STREQ(lang->GetString(0x6000), u8"神鷹暢遊");
delete lang;
} }
const utf8* LanguagePackTest::LanguageEnGB = "# STR_XXXX part is read and XXXX becomes the string id number.\n" const utf8* LanguagePackTest::LanguageEnGB = "# STR_XXXX part is read and XXXX becomes the string id number.\n"