Make PluginMetadata::GetRequirements() return a std::vector

The collection is only ever iterated over, and the uniqueness and
ordering don't matter.
This commit is contained in:
Oliver Hamlet
2020-07-11 19:14:03 +01:00
parent 998b70d698
commit 2bfc38358b
9 changed files with 25 additions and 32 deletions
+3 -3
View File
@@ -106,7 +106,7 @@ public:
* Get the files that the plugin requires to be installed.
* @return The files that the plugin requires to be installed.
*/
LOOT_API std::set<File> GetRequirements() const;
LOOT_API std::vector<File> GetRequirements() const;
/**
* Get the files that the plugin is incompatible with.
@@ -177,7 +177,7 @@ public:
* @param requirements
* The files to set.
*/
LOOT_API void SetRequirements(const std::set<File>& requirements);
LOOT_API void SetRequirements(const std::vector<File>& requirements);
/**
* Set the files that the plugin must load after.
@@ -269,7 +269,7 @@ private:
std::string name_;
std::optional<std::string> group_;
std::vector<File> loadAfter_;
std::set<File> requirements_;
std::vector<File> requirements_;
std::set<File> incompatibilities_;
std::vector<Message> messages_;
std::set<Tag> tags_;
+4 -4
View File
@@ -134,14 +134,14 @@ PluginMetadata ConditionEvaluator::EvaluateAll(const PluginMetadata& pluginMetad
}
evaluatedMetadata.SetLoadAfterFiles(files);
std::set<File> fileSet;
fileSet.clear();
files.clear();
for (const auto& file : pluginMetadata.GetRequirements()) {
if (Evaluate(file.GetCondition()))
fileSet.insert(file);
files.push_back(file);
}
evaluatedMetadata.SetRequirements(fileSet);
evaluatedMetadata.SetRequirements(files);
std::set<File> fileSet;
fileSet.clear();
for (const auto& file : pluginMetadata.GetIncompatibilities()) {
if (Evaluate(file.GetCondition()))
+4 -11
View File
@@ -58,7 +58,7 @@ void PluginMetadata::MergeMetadata(const PluginMetadata& plugin) {
}
loadAfter_ = mergeVectors(loadAfter_, plugin.loadAfter_);
requirements_.insert(begin(plugin.requirements_), end(plugin.requirements_));
requirements_ = mergeVectors(requirements_, plugin.requirements_);
incompatibilities_.insert(begin(plugin.incompatibilities_),
end(plugin.incompatibilities_));
@@ -88,16 +88,9 @@ PluginMetadata PluginMetadata::NewMetadata(const PluginMetadata& plugin) const {
// Compare this plugin against the given plugin.
p.SetLoadAfterFiles(diffVectors(loadAfter_, plugin.loadAfter_));
p.SetRequirements(diffVectors(requirements_, plugin.requirements_));
set<File> filesDiff;
filesDiff.clear();
set_difference(begin(requirements_),
end(requirements_),
begin(plugin.requirements_),
end(plugin.requirements_),
inserter(filesDiff, begin(filesDiff)));
p.SetRequirements(filesDiff);
filesDiff.clear();
set_difference(begin(incompatibilities_),
end(incompatibilities_),
@@ -161,7 +154,7 @@ std::vector<File> PluginMetadata::GetLoadAfterFiles() const {
return loadAfter_;
}
std::set<File> PluginMetadata::GetRequirements() const { return requirements_; }
std::vector<File> PluginMetadata::GetRequirements() const { return requirements_; }
std::set<File> PluginMetadata::GetIncompatibilities() const {
return incompatibilities_;
@@ -202,7 +195,7 @@ void PluginMetadata::SetLoadAfterFiles(const std::vector<File>& l) {
loadAfter_ = l;
}
void PluginMetadata::SetRequirements(const std::set<File>& r) {
void PluginMetadata::SetRequirements(const std::vector<File>& r) {
requirements_ = r;
}
+1 -1
View File
@@ -105,7 +105,7 @@ struct convert<loot::PluginMetadata> {
if (node["after"])
rhs.SetLoadAfterFiles(node["after"].as<std::vector<loot::File>>());
if (node["req"])
rhs.SetRequirements(node["req"].as<std::set<loot::File>>());
rhs.SetRequirements(node["req"].as<std::vector<loot::File>>());
if (node["inc"])
rhs.SetIncompatibilities(node["inc"].as<std::set<loot::File>>());
if (node["msg"])
+2 -2
View File
@@ -142,11 +142,11 @@ const std::vector<File>& PluginSortingData::GetUserLoadAfterFiles() const {
return userLoadAfter_;
}
const std::set<File>& PluginSortingData::GetMasterlistRequirements() const {
const std::vector<File>& PluginSortingData::GetMasterlistRequirements() const {
return masterlistReq_;
}
const std::set<File>& PluginSortingData::GetUserRequirements() const {
const std::vector<File>& PluginSortingData::GetUserRequirements() const {
return userReq_;
}
const std::optional<size_t>& PluginSortingData::GetLoadOrderIndex() const {
+4 -4
View File
@@ -52,8 +52,8 @@ public:
const std::vector<File>& GetMasterlistLoadAfterFiles() const;
const std::vector<File>& GetUserLoadAfterFiles() const;
const std::set<File>& GetMasterlistRequirements() const;
const std::set<File>& GetUserRequirements() const;
const std::vector<File>& GetMasterlistRequirements() const;
const std::vector<File>& GetUserRequirements() const;
const std::optional<size_t>& GetLoadOrderIndex() const;
@@ -64,8 +64,8 @@ private:
std::vector<File> masterlistLoadAfter_;
std::vector<File> userLoadAfter_;
std::set<File> masterlistReq_;
std::set<File> userReq_;
std::vector<File> masterlistReq_;
std::vector<File> userReq_;
std::optional<size_t> loadOrderIndex_;
size_t numOverrideFormIDs;
@@ -657,7 +657,7 @@ TEST_P(
ASSERT_NO_THROW(db_->LoadLists(masterlistPath, userlistPath_));
PluginMetadata newMetadata(blankDifferentEsp);
newMetadata.SetRequirements(std::set<File>({File(masterFile)}));
newMetadata.SetRequirements(std::vector<File>({File(masterFile)}));
db_->SetPluginUserMetadata(newMetadata);
@@ -677,7 +677,7 @@ TEST_P(DatabaseInterfaceTest,
ASSERT_NO_THROW(db_->LoadLists(masterlistPath, userlistPath_));
PluginMetadata newMetadata(blankEsm);
newMetadata.SetRequirements(std::set<File>({File(masterFile)}));
newMetadata.SetRequirements(std::vector<File>({File(masterFile)}));
db_->SetPluginUserMetadata(newMetadata);
@@ -193,7 +193,7 @@ TEST_P(ConditionEvaluatorTest, evaluateAllShouldEvaluateAllMetadataConditions) {
std::set<File> expectedFileSet({file1});
EXPECT_EQ("group1", plugin.GetGroup().value());
EXPECT_EQ(expectedFiles, plugin.GetLoadAfterFiles());
EXPECT_EQ(expectedFileSet, plugin.GetRequirements());
EXPECT_EQ(expectedFiles, plugin.GetRequirements());
EXPECT_EQ(expectedFileSet, plugin.GetIncompatibilities());
EXPECT_EQ(std::vector<Message>({message1}), plugin.GetMessages());
EXPECT_EQ(std::set<Tag>({tag1}), plugin.GetTags());
@@ -182,7 +182,7 @@ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeRequirementData) {
plugin2.SetRequirements({file1, file2});
plugin1.MergeMetadata(plugin2);
EXPECT_EQ(std::set<File>({file1, file2}), plugin1.GetRequirements());
EXPECT_EQ(std::vector<File>({file1, file2}), plugin1.GetRequirements());
}
TEST_P(PluginMetadataTest, mergeMetadataShouldMergeIncompatibilityData) {
@@ -340,7 +340,7 @@ TEST_P(
plugin2.SetRequirements({file1, file3});
PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
EXPECT_EQ(std::set<File>({file2}), newMetadata.GetRequirements());
EXPECT_EQ(std::vector<File>({file2}), newMetadata.GetRequirements());
}
TEST_P(
@@ -794,7 +794,7 @@ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetReqFieldIfRequirementsExist) {
YAML::Node node;
node = plugin;
EXPECT_EQ(plugin.GetRequirements(), node["req"].as<std::set<File>>());
EXPECT_EQ(plugin.GetRequirements(), node["req"].as<std::vector<File>>());
}
TEST_P(PluginMetadataTest,
@@ -882,7 +882,7 @@ TEST_P(PluginMetadataTest, decodingFromYamlShouldStoreAllGivenData) {
EXPECT_EQ("Blank.esp", plugin.GetName());
EXPECT_EQ(std::vector<File>({File("Blank.esm")}), plugin.GetLoadAfterFiles());
EXPECT_EQ(std::set<File>({File("Blank.esm")}), plugin.GetRequirements());
EXPECT_EQ(std::vector<File>({File("Blank.esm")}), plugin.GetRequirements());
EXPECT_EQ(std::set<File>({File("Blank.esm")}), plugin.GetIncompatibilities());
EXPECT_EQ(std::vector<Message>({Message(MessageType::say, "content")}),
plugin.GetMessages());