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:
Oliver Hamlet
2018-10-20 12:48:24 +01:00
parent 64c25faaef
commit 1fe8f901f0
10 changed files with 25 additions and 28 deletions
+3 -4
View File
@@ -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;
/**
+2 -2
View File
@@ -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
View File
@@ -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;
+2 -2
View File
@@ -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) {
+1 -2
View File
@@ -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;
+2 -2
View File
@@ -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,
+2 -2
View File
@@ -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());