1
0
Fork 0

Codechange: Use std::unique_ptr for script info/library instances. (#13892)

pull/13896/head
Peter Nelson 2025-03-25 21:07:02 +00:00 committed by GitHub
parent 47d078c033
commit fb008436b8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 30 additions and 36 deletions

View File

@ -138,9 +138,9 @@ public:
static bool HasAI(const struct ContentInfo *ci, bool md5sum); static bool HasAI(const struct ContentInfo *ci, bool md5sum);
static bool HasAILibrary(const ContentInfo *ci, bool md5sum); static bool HasAILibrary(const ContentInfo *ci, bool md5sum);
private: private:
static uint frame_counter; ///< Tick counter for the AI code static uint frame_counter; ///< Tick counter for the AI code
static class AIScannerInfo *scanner_info; ///< ScriptScanner instance that is used to find AIs static std::unique_ptr<AIScannerInfo> scanner_info; ///< ScriptScanner instance that is used to find AIs
static class AIScannerLibrary *scanner_library; ///< ScriptScanner instance that is used to find AI Libraries static std::unique_ptr<AIScannerLibrary> scanner_library; ///< ScriptScanner instance that is used to find AI Libraries
}; };
#endif /* AI_HPP */ #endif /* AI_HPP */

View File

@ -24,8 +24,8 @@
#include "../safeguards.h" #include "../safeguards.h"
/* static */ uint AI::frame_counter = 0; /* static */ uint AI::frame_counter = 0;
/* static */ AIScannerInfo *AI::scanner_info = nullptr; /* static */ std::unique_ptr<AIScannerInfo> AI::scanner_info = nullptr;
/* static */ AIScannerLibrary *AI::scanner_library = nullptr; /* static */ std::unique_ptr<AIScannerLibrary> AI::scanner_library = nullptr;
/* static */ bool AI::CanStartNew() /* static */ bool AI::CanStartNew()
{ {
@ -169,9 +169,9 @@
AI::frame_counter = 0; AI::frame_counter = 0;
if (AI::scanner_info == nullptr) { if (AI::scanner_info == nullptr) {
TarScanner::DoScan(TarScanner::Mode::AI); TarScanner::DoScan(TarScanner::Mode::AI);
AI::scanner_info = new AIScannerInfo(); AI::scanner_info = std::make_unique<AIScannerInfo>();
AI::scanner_info->Initialize(); AI::scanner_info->Initialize();
AI::scanner_library = new AIScannerLibrary(); AI::scanner_library = std::make_unique<AIScannerLibrary>();
AI::scanner_library->Initialize(); AI::scanner_library->Initialize();
} }
} }
@ -185,10 +185,8 @@
* still load all the AIS, while keeping the configs in place */ * still load all the AIS, while keeping the configs in place */
Rescan(); Rescan();
} else { } else {
delete AI::scanner_info; AI::scanner_info.reset();
delete AI::scanner_library; AI::scanner_library.reset();
AI::scanner_info = nullptr;
AI::scanner_library = nullptr;
for (CompanyID c = CompanyID::Begin(); c < MAX_COMPANIES; ++c) { for (CompanyID c = CompanyID::Begin(); c < MAX_COMPANIES; ++c) {
if (_settings_game.ai_config[c] != nullptr) { if (_settings_game.ai_config[c] != nullptr) {
@ -354,11 +352,11 @@
/* static */ AIScannerInfo *AI::GetScannerInfo() /* static */ AIScannerInfo *AI::GetScannerInfo()
{ {
return AI::scanner_info; return AI::scanner_info.get();
} }
/* static */ AIScannerLibrary *AI::GetScannerLibrary() /* static */ AIScannerLibrary *AI::GetScannerLibrary()
{ {
return AI::scanner_library; return AI::scanner_library.get();
} }

View File

@ -67,7 +67,7 @@ public:
/** /**
* Get the current GameScript instance. * Get the current GameScript instance.
*/ */
static class GameInstance *GetGameInstance() { return Game::instance; } static class GameInstance *GetGameInstance() { return Game::instance.get(); }
/** /**
* Get the current GameInfo. * Get the current GameInfo.
@ -98,7 +98,7 @@ public:
/** /**
* Get the current active instance. * Get the current active instance.
*/ */
static class GameInstance *GetInstance() { return Game::instance; } static class GameInstance *GetInstance() { return Game::instance.get(); }
/** Wrapper function for GameScanner::HasGame */ /** Wrapper function for GameScanner::HasGame */
static bool HasGame(const struct ContentInfo *ci, bool md5sum); static bool HasGame(const struct ContentInfo *ci, bool md5sum);
@ -109,11 +109,11 @@ public:
static GameScannerLibrary *GetScannerLibrary(); static GameScannerLibrary *GetScannerLibrary();
private: private:
static uint frame_counter; ///< Tick counter for the Game code. static uint frame_counter; ///< Tick counter for the Game code.
static class GameInstance *instance; ///< Instance to the current active Game. static std::unique_ptr<GameInstance> instance; ///< Instance to the current active Game.
static class GameScannerInfo *scanner_info; ///< Scanner for Game scripts. static std::unique_ptr<GameScannerInfo> scanner_info; ///< Scanner for Game scripts.
static class GameScannerLibrary *scanner_library; ///< Scanner for GS Libraries. static std::unique_ptr<GameScannerLibrary> scanner_library; ///< Scanner for GS Libraries.
static class GameInfo *info; ///< Current selected GameInfo. static GameInfo *info; ///< Current selected GameInfo.
}; };
#endif /* GAME_HPP */ #endif /* GAME_HPP */

View File

@ -24,9 +24,9 @@
/* static */ uint Game::frame_counter = 0; /* static */ uint Game::frame_counter = 0;
/* static */ GameInfo *Game::info = nullptr; /* static */ GameInfo *Game::info = nullptr;
/* static */ GameInstance *Game::instance = nullptr; /* static */ std::unique_ptr<GameInstance> Game::instance = nullptr;
/* static */ GameScannerInfo *Game::scanner_info = nullptr; /* static */ std::unique_ptr<GameScannerInfo> Game::scanner_info = nullptr;
/* static */ GameScannerLibrary *Game::scanner_library = nullptr; /* static */ std::unique_ptr<GameScannerLibrary> Game::scanner_library = nullptr;
/* static */ void Game::GameLoop() /* static */ void Game::GameLoop()
{ {
@ -62,9 +62,9 @@
if (Game::scanner_info == nullptr) { if (Game::scanner_info == nullptr) {
TarScanner::DoScan(TarScanner::Mode::Game); TarScanner::DoScan(TarScanner::Mode::Game);
Game::scanner_info = new GameScannerInfo(); Game::scanner_info = std::make_unique<GameScannerInfo>();
Game::scanner_info->Initialize(); Game::scanner_info->Initialize();
Game::scanner_library = new GameScannerLibrary(); Game::scanner_library = std::make_unique<GameScannerLibrary>();
Game::scanner_library->Initialize(); Game::scanner_library->Initialize();
} }
} }
@ -89,7 +89,7 @@
cur_company.Change(OWNER_DEITY); cur_company.Change(OWNER_DEITY);
Game::info = info; Game::info = info;
Game::instance = new GameInstance(); Game::instance = std::make_unique<GameInstance>();
Game::instance->Initialize(info); Game::instance->Initialize(info);
Game::instance->LoadOnStack(config->GetToLoadData()); Game::instance->LoadOnStack(config->GetToLoadData());
config->SetToLoadData(nullptr); config->SetToLoadData(nullptr);
@ -103,8 +103,7 @@
{ {
Backup<CompanyID> cur_company(_current_company); Backup<CompanyID> cur_company(_current_company);
delete Game::instance; Game::instance.reset();
Game::instance = nullptr;
Game::info = nullptr; Game::info = nullptr;
cur_company.Restore(); cur_company.Restore();
@ -112,10 +111,8 @@
if (keepConfig) { if (keepConfig) {
Rescan(); Rescan();
} else { } else {
delete Game::scanner_info; Game::scanner_info.reset();
delete Game::scanner_library; Game::scanner_library.reset();
Game::scanner_info = nullptr;
Game::scanner_library = nullptr;
if (_settings_game.game_config != nullptr) { if (_settings_game.game_config != nullptr) {
delete _settings_game.game_config; delete _settings_game.game_config;
@ -172,8 +169,7 @@
Debug(script, 0, "After a reload, the GameScript by the name '{}' was no longer found, and removed from the list.", _settings_game.game_config->GetName()); Debug(script, 0, "After a reload, the GameScript by the name '{}' was no longer found, and removed from the list.", _settings_game.game_config->GetName());
_settings_game.game_config->Change(std::nullopt); _settings_game.game_config->Change(std::nullopt);
if (Game::instance != nullptr) { if (Game::instance != nullptr) {
delete Game::instance; Game::instance.reset();
Game::instance = nullptr;
Game::info = nullptr; Game::info = nullptr;
} }
} else if (Game::instance != nullptr) { } else if (Game::instance != nullptr) {
@ -262,9 +258,9 @@
/* static */ GameScannerInfo *Game::GetScannerInfo() /* static */ GameScannerInfo *Game::GetScannerInfo()
{ {
return Game::scanner_info; return Game::scanner_info.get();
} }
/* static */ GameScannerLibrary *Game::GetScannerLibrary() /* static */ GameScannerLibrary *Game::GetScannerLibrary()
{ {
return Game::scanner_library; return Game::scanner_library.get();
} }