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 <algorithm>
#include <memory>
#include <string>
#include <vector>
@ -62,7 +63,7 @@ private:
ScenarioOverride* _currentScenarioOverride = nullptr;
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);
@ -90,15 +91,15 @@ public:
}
// Parse the memory as text
LanguagePack* result = FromText(id, fileData);
auto result = FromText(id, fileData);
Memory::Free(fileData);
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)
@ -579,13 +580,13 @@ private:
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);
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);
return languagePack;

View File

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

View File

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

View File

@ -23,27 +23,25 @@ protected:
TEST_F(LanguagePackTest, create_empty)
{
ILanguagePack* empty = LanguagePackFactory::FromText(0, "");
auto empty = LanguagePackFactory::FromText(0, "");
ASSERT_EQ(empty->GetId(), 0);
ASSERT_EQ(empty->GetCount(), 0U);
delete empty;
}
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->GetCount(), 1U);
ASSERT_STREQ(lang->GetString(0), nullptr);
lang->SetString(0, "xx");
ASSERT_EQ(lang->GetCount(), 1U);
ASSERT_STREQ(lang->GetString(0), "xx");
delete lang;
}
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->GetCount(), 4U);
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->GetScenarioOverrideStringId("No such park", 0), STR_NONE);
ASSERT_EQ(lang->GetObjectOverrideStringId(" ", 0), STR_NONE);
delete lang;
}
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->GetCount(), 4U);
ASSERT_STREQ(lang->GetString(2), u8"懸吊式雲霄飛車");
@ -70,7 +67,6 @@ TEST_F(LanguagePackTest, language_pack_multibyte)
ASSERT_STREQ(lang->GetString(0x7002), u8"在隱藏於森林深處的清空範圍中, 建造一個很受歡迎的樂園");
ASSERT_EQ(lang->GetObjectOverrideStringId("CONDORRD", 0), 0x6000);
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"