mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
Revert making GameInterface::GetPlugin() return an optional
It doesn't add anything as std::shared_ptr can already represent a null state, and just makes handling values more complicated.
This commit is contained in:
@@ -81,11 +81,10 @@ public:
|
||||
* @brief Get data for a loaded plugin.
|
||||
* @param pluginName
|
||||
* The filename of the plugin to get data for.
|
||||
* @returns If the plugin has been loaded, an optional containing a pointer to
|
||||
* an implementation of PluginInterface for that plugin, otherwise an
|
||||
* optional containing no value.
|
||||
* @returns A shared pointer to a const PluginInterface implementation. The
|
||||
* pointer is null if the given plugin has not been loaded.
|
||||
*/
|
||||
virtual std::optional<std::shared_ptr<const PluginInterface>> GetPlugin(
|
||||
virtual std::shared_ptr<const PluginInterface> GetPlugin(
|
||||
const std::string& pluginName) const = 0;
|
||||
|
||||
/**
|
||||
|
||||
@@ -194,7 +194,7 @@ void Game::LoadPlugins(const std::vector<std::string>& plugins,
|
||||
}
|
||||
}
|
||||
|
||||
std::optional<std::shared_ptr<const PluginInterface>> Game::GetPlugin(
|
||||
std::shared_ptr<const PluginInterface> Game::GetPlugin(
|
||||
const std::string& pluginName) const {
|
||||
return cache_->GetPlugin(pluginName);
|
||||
}
|
||||
@@ -231,7 +231,7 @@ bool Game::IsPluginActive(const std::string& pluginName) const {
|
||||
auto plugin = cache_->GetPlugin(pluginName);
|
||||
|
||||
if (plugin) {
|
||||
return plugin.value()->IsActive();
|
||||
return plugin->IsActive();
|
||||
}
|
||||
|
||||
return loadOrderHandler_->IsPluginActive(pluginName);
|
||||
|
||||
+1
-2
@@ -58,8 +58,7 @@ public:
|
||||
void LoadPlugins(const std::vector<std::string>& plugins,
|
||||
bool loadHeadersOnly);
|
||||
|
||||
std::optional<std::shared_ptr<const PluginInterface>>
|
||||
GetPlugin(
|
||||
std::shared_ptr<const PluginInterface> GetPlugin(
|
||||
const std::string& pluginName) const;
|
||||
|
||||
std::set<std::shared_ptr<const PluginInterface>> GetLoadedPlugins() const;
|
||||
|
||||
@@ -97,13 +97,13 @@ std::set<std::shared_ptr<const Plugin>> GameCache::GetPlugins() const {
|
||||
return output;
|
||||
}
|
||||
|
||||
std::optional<std::shared_ptr<const Plugin>> GameCache::GetPlugin(
|
||||
std::shared_ptr<const Plugin> GameCache::GetPlugin(
|
||||
const std::string& pluginName) const {
|
||||
auto it = plugins_.find(to_lower(pluginName));
|
||||
if (it != end(plugins_))
|
||||
return it->second;
|
||||
|
||||
return std::nullopt;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void GameCache::AddPlugin(const Plugin&& plugin) {
|
||||
|
||||
@@ -47,8 +47,7 @@ public:
|
||||
void CacheCrc(const std::string& file, uint32_t crc);
|
||||
|
||||
std::set<std::shared_ptr<const Plugin>> GetPlugins() const;
|
||||
std::optional<std::shared_ptr<const Plugin>> GetPlugin(
|
||||
const std::string& pluginName) const;
|
||||
std::shared_ptr<const Plugin> GetPlugin(const std::string& pluginName) const;
|
||||
void AddPlugin(const Plugin&& plugin);
|
||||
|
||||
std::set<std::filesystem::path> GetArchivePaths() const;
|
||||
|
||||
@@ -415,7 +415,7 @@ Version ConditionEvaluator::getVersion(const std::string& filePath) const {
|
||||
|
||||
auto plugin = gameCache_->GetPlugin(filePath);
|
||||
if (plugin) {
|
||||
return Version(plugin.value()->GetVersion().value_or(""));
|
||||
return Version(plugin->GetVersion().value_or(""));
|
||||
}
|
||||
|
||||
// The file wasn't in the plugin cache, load it as a plugin
|
||||
@@ -451,7 +451,7 @@ uint32_t ConditionEvaluator::getCrc(const std::string & file) const {
|
||||
// Get the CRC from the game plugin cache if possible.
|
||||
auto plugin = gameCache_->GetPlugin(file);
|
||||
if (plugin) {
|
||||
crc = plugin.value()->GetCRC().value_or(0);
|
||||
crc = plugin->GetCRC().value_or(0);
|
||||
}
|
||||
|
||||
// Otherwise calculate it from the file.
|
||||
|
||||
@@ -99,7 +99,7 @@ TEST_P(
|
||||
|
||||
// Check that one plugin's header has been read.
|
||||
ASSERT_NO_THROW(handle_->GetPlugin(masterFile));
|
||||
auto plugin = handle_->GetPlugin(masterFile).value();
|
||||
auto plugin = handle_->GetPlugin(masterFile);
|
||||
EXPECT_EQ("5.0", plugin->GetVersion().value());
|
||||
|
||||
// Check that only the header has been read.
|
||||
@@ -113,7 +113,7 @@ TEST_P(GameInterfaceTest,
|
||||
|
||||
// Check that one plugin's header has been read.
|
||||
ASSERT_NO_THROW(handle_->GetPlugin(masterFile));
|
||||
auto plugin = handle_->GetPlugin(masterFile).value();
|
||||
auto plugin = handle_->GetPlugin(masterFile);
|
||||
EXPECT_EQ("5.0", plugin->GetVersion().value());
|
||||
|
||||
// Check that not only the header has been read.
|
||||
@@ -125,7 +125,7 @@ TEST_P(GameInterfaceTest, loadPluginsWithANonAsciiPluginShouldLoadIt) {
|
||||
EXPECT_EQ(1, handle_->GetLoadedPlugins().size());
|
||||
|
||||
// Check that one plugin's header has been read.
|
||||
auto plugin = handle_->GetPlugin(nonAsciiEsm).value();
|
||||
auto plugin = handle_->GetPlugin(nonAsciiEsm);
|
||||
EXPECT_EQ("5.0", plugin->GetVersion().value());
|
||||
|
||||
// Check that not only the header has been read.
|
||||
|
||||
@@ -92,7 +92,7 @@ TEST_P(GameCacheTest, addingAPluginThatDoesNotExistShouldSucceed) {
|
||||
game_.GetLoadOrderHandler(),
|
||||
game_.DataPath() / blankEsm,
|
||||
true));
|
||||
EXPECT_EQ(blankEsm, cache_.GetPlugin(blankEsm).value()->GetName());
|
||||
EXPECT_EQ(blankEsm, cache_.GetPlugin(blankEsm)->GetName());
|
||||
}
|
||||
|
||||
TEST_P(GameCacheTest,
|
||||
@@ -102,17 +102,17 @@ TEST_P(GameCacheTest,
|
||||
game_.GetLoadOrderHandler(),
|
||||
game_.DataPath() / blankEsm,
|
||||
true));
|
||||
EXPECT_FALSE(cache_.GetPlugin(blankEsm).value()->GetCRC());
|
||||
EXPECT_FALSE(cache_.GetPlugin(blankEsm)->GetCRC());
|
||||
|
||||
cache_.AddPlugin(Plugin(game_.Type(),
|
||||
std::make_shared<GameCache>(GameCache()),
|
||||
game_.GetLoadOrderHandler(),
|
||||
game_.DataPath() / blankEsm,
|
||||
false));
|
||||
EXPECT_EQ(blankEsmCrc, cache_.GetPlugin(blankEsm).value()->GetCRC().value());
|
||||
EXPECT_EQ(blankEsmCrc, cache_.GetPlugin(blankEsm)->GetCRC().value());
|
||||
}
|
||||
|
||||
TEST_P(GameCacheTest, gettingAPluginThatIsNotCachedShouldReturnAnEmptyOptional) {
|
||||
TEST_P(GameCacheTest, gettingAPluginThatIsNotCachedShouldReturnANullPointer) {
|
||||
EXPECT_FALSE(cache_.GetPlugin(blankEsm));
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ TEST_P(GameCacheTest, gettingAPluginShouldBeCaseInsensitive) {
|
||||
game_.GetLoadOrderHandler(),
|
||||
game_.DataPath() / blankEsm,
|
||||
true));
|
||||
EXPECT_EQ(blankEsm, cache_.GetPlugin(blankEsm).value()->GetName());
|
||||
EXPECT_EQ(blankEsm, cache_.GetPlugin(blankEsm)->GetName());
|
||||
}
|
||||
|
||||
TEST_P(GameCacheTest,
|
||||
|
||||
@@ -108,7 +108,7 @@ TEST_P(
|
||||
|
||||
// Check that one plugin's header has been read.
|
||||
ASSERT_NO_THROW(game.GetPlugin(masterFile));
|
||||
auto plugin = game.GetPlugin(masterFile).value();
|
||||
auto plugin = game.GetPlugin(masterFile);
|
||||
EXPECT_EQ("5.0", plugin->GetVersion().value());
|
||||
|
||||
// Check that only the header has been read.
|
||||
@@ -149,7 +149,7 @@ TEST_P(GameTest,
|
||||
|
||||
// Check that one plugin's header has been read.
|
||||
ASSERT_NO_THROW(game.GetPlugin(blankEsm));
|
||||
auto plugin = game.GetPlugin(blankEsm).value();
|
||||
auto plugin = game.GetPlugin(blankEsm);
|
||||
EXPECT_EQ("5.0", plugin->GetVersion().value());
|
||||
|
||||
// Check that not only the header has been read.
|
||||
|
||||
@@ -146,27 +146,27 @@ TEST_P(PluginSorterTest,
|
||||
ASSERT_NO_THROW(loadInstalledPlugins(game_, false));
|
||||
|
||||
auto esp = PluginSortingData(
|
||||
*dynamic_cast<const Plugin *>(game_.GetPlugin(blankEsp).value().get()),
|
||||
*dynamic_cast<const Plugin *>(game_.GetPlugin(blankEsp).get()),
|
||||
PluginMetadata(),
|
||||
PluginMetadata());
|
||||
EXPECT_FALSE(esp.IsMaster());
|
||||
|
||||
auto master = PluginSortingData(
|
||||
*dynamic_cast<const Plugin *>(game_.GetPlugin(blankEsm).value().get()),
|
||||
*dynamic_cast<const Plugin *>(game_.GetPlugin(blankEsm).get()),
|
||||
PluginMetadata(),
|
||||
PluginMetadata());
|
||||
EXPECT_TRUE(master.IsMaster());
|
||||
|
||||
if (GetParam() == GameType::fo4 || GetParam() == GameType::tes5se) {
|
||||
auto lightMaster = PluginSortingData(
|
||||
*dynamic_cast<const Plugin *>(game_.GetPlugin(blankEsl).value().get()),
|
||||
*dynamic_cast<const Plugin *>(game_.GetPlugin(blankEsl).get()),
|
||||
PluginMetadata(),
|
||||
PluginMetadata());
|
||||
EXPECT_TRUE(lightMaster.IsMaster());
|
||||
|
||||
auto lightMasterEsp =
|
||||
PluginSortingData(*dynamic_cast<const Plugin *>(
|
||||
game_.GetPlugin(blankEslEsp).value().get()),
|
||||
game_.GetPlugin(blankEslEsp).get()),
|
||||
PluginMetadata(),
|
||||
PluginMetadata());
|
||||
EXPECT_FALSE(lightMasterEsp.IsMaster());
|
||||
|
||||
Reference in New Issue
Block a user