Make PluginMetadata::GetIncompatibilities() 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:04 +01:00
parent 2bfc38358b
commit 8dbbb55ecc
7 changed files with 17 additions and 28 deletions
+3 -3
View File
@@ -112,7 +112,7 @@ public:
* Get the files that the plugin is incompatible with.
* @return The files that the plugin is incompatible with.
*/
LOOT_API std::set<File> GetIncompatibilities() const;
LOOT_API std::vector<File> GetIncompatibilities() const;
/**
* Get the plugin's messages.
@@ -184,7 +184,7 @@ public:
* @param incompatibilities
* The files to set.
*/
LOOT_API void SetIncompatibilities(const std::set<File>& incompatibilities);
LOOT_API void SetIncompatibilities(const std::vector<File>& incompatibilities);
/**
* Set the plugin's messages.
@@ -270,7 +270,7 @@ private:
std::optional<std::string> group_;
std::vector<File> loadAfter_;
std::vector<File> requirements_;
std::set<File> incompatibilities_;
std::vector<File> incompatibilities_;
std::vector<Message> messages_;
std::set<Tag> tags_;
std::set<PluginCleaningData> dirtyInfo_;
+3 -4
View File
@@ -141,13 +141,12 @@ PluginMetadata ConditionEvaluator::EvaluateAll(const PluginMetadata& pluginMetad
}
evaluatedMetadata.SetRequirements(files);
std::set<File> fileSet;
fileSet.clear();
files.clear();
for (const auto& file : pluginMetadata.GetIncompatibilities()) {
if (Evaluate(file.GetCondition()))
fileSet.insert(file);
files.push_back(file);
}
evaluatedMetadata.SetIncompatibilities(fileSet);
evaluatedMetadata.SetIncompatibilities(files);
std::vector<Message> messages;
for (const auto& message : pluginMetadata.GetMessages()) {
+4 -13
View File
@@ -59,8 +59,7 @@ void PluginMetadata::MergeMetadata(const PluginMetadata& plugin) {
loadAfter_ = mergeVectors(loadAfter_, plugin.loadAfter_);
requirements_ = mergeVectors(requirements_, plugin.requirements_);
incompatibilities_.insert(begin(plugin.incompatibilities_),
end(plugin.incompatibilities_));
incompatibilities_ = mergeVectors(incompatibilities_, plugin.incompatibilities_);
// Merge Bash Tags too. Conditions are ignored during comparison, but
// if a tag is added and removed, both instances will be in the set.
@@ -89,15 +88,7 @@ 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(incompatibilities_),
end(incompatibilities_),
begin(plugin.incompatibilities_),
end(plugin.incompatibilities_),
inserter(filesDiff, begin(filesDiff)));
p.SetIncompatibilities(filesDiff);
p.SetIncompatibilities(diffVectors(incompatibilities_, plugin.incompatibilities_));
vector<Message> msgs1 = plugin.GetMessages();
vector<Message> msgs2 = messages_;
@@ -156,7 +147,7 @@ std::vector<File> PluginMetadata::GetLoadAfterFiles() const {
std::vector<File> PluginMetadata::GetRequirements() const { return requirements_; }
std::set<File> PluginMetadata::GetIncompatibilities() const {
std::vector<File> PluginMetadata::GetIncompatibilities() const {
return incompatibilities_;
}
@@ -199,7 +190,7 @@ void PluginMetadata::SetRequirements(const std::vector<File>& r) {
requirements_ = r;
}
void PluginMetadata::SetIncompatibilities(const std::set<File>& i) {
void PluginMetadata::SetIncompatibilities(const std::vector<File>& i) {
incompatibilities_ = i;
}
+1 -1
View File
@@ -107,7 +107,7 @@ struct convert<loot::PluginMetadata> {
if (node["req"])
rhs.SetRequirements(node["req"].as<std::vector<loot::File>>());
if (node["inc"])
rhs.SetIncompatibilities(node["inc"].as<std::set<loot::File>>());
rhs.SetIncompatibilities(node["inc"].as<std::vector<loot::File>>());
if (node["msg"])
rhs.SetMessages(node["msg"].as<std::vector<loot::Message>>());
if (node["tag"])
@@ -190,11 +190,10 @@ TEST_P(ConditionEvaluatorTest, evaluateAllShouldEvaluateAllMetadataConditions) {
EXPECT_NO_THROW(plugin = evaluator_.EvaluateAll(plugin));
std::vector<File> expectedFiles({file1});
std::set<File> expectedFileSet({file1});
EXPECT_EQ("group1", plugin.GetGroup().value());
EXPECT_EQ(expectedFiles, plugin.GetLoadAfterFiles());
EXPECT_EQ(expectedFiles, plugin.GetRequirements());
EXPECT_EQ(expectedFileSet, plugin.GetIncompatibilities());
EXPECT_EQ(expectedFiles, plugin.GetIncompatibilities());
EXPECT_EQ(std::vector<Message>({message1}), plugin.GetMessages());
EXPECT_EQ(std::set<Tag>({tag1}), plugin.GetTags());
EXPECT_EQ(std::set<PluginCleaningData>({info1}), plugin.GetDirtyInfo());
@@ -195,7 +195,7 @@ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeIncompatibilityData) {
plugin2.SetIncompatibilities({file1, file2});
plugin1.MergeMetadata(plugin2);
EXPECT_EQ(std::set<File>({file1, file2}), plugin1.GetIncompatibilities());
EXPECT_EQ(std::vector<File>({file1, file2}), plugin1.GetIncompatibilities());
}
TEST_P(PluginMetadataTest, mergeMetadataShouldMergeMessages) {
@@ -356,7 +356,7 @@ TEST_P(
plugin2.SetIncompatibilities({file1, file3});
PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
EXPECT_EQ(std::set<File>({file2}), newMetadata.GetIncompatibilities());
EXPECT_EQ(std::vector<File>({file2}), newMetadata.GetIncompatibilities());
}
TEST_P(PluginMetadataTest,
@@ -804,7 +804,7 @@ TEST_P(PluginMetadataTest,
YAML::Node node;
node = plugin;
EXPECT_EQ(plugin.GetIncompatibilities(), node["inc"].as<std::set<File>>());
EXPECT_EQ(plugin.GetIncompatibilities(), node["inc"].as<std::vector<File>>());
}
TEST_P(PluginMetadataTest, encodingAsYamlShouldSetMsgFieldIfMessagesExist) {
@@ -883,7 +883,7 @@ TEST_P(PluginMetadataTest, decodingFromYamlShouldStoreAllGivenData) {
EXPECT_EQ("Blank.esp", plugin.GetName());
EXPECT_EQ(std::vector<File>({File("Blank.esm")}), plugin.GetLoadAfterFiles());
EXPECT_EQ(std::vector<File>({File("Blank.esm")}), plugin.GetRequirements());
EXPECT_EQ(std::set<File>({File("Blank.esm")}), plugin.GetIncompatibilities());
EXPECT_EQ(std::vector<File>({File("Blank.esm")}), plugin.GetIncompatibilities());
EXPECT_EQ(std::vector<Message>({Message(MessageType::say, "content")}),
plugin.GetMessages());
EXPECT_EQ(std::set<Tag>({Tag("Relev")}), plugin.GetTags());
+1 -1
View File
@@ -297,7 +297,7 @@ TEST_P(
File(blankEsm),
}),
plugin.GetLoadAfterFiles());
EXPECT_EQ(std::set<File>({
EXPECT_EQ(std::vector<File>({
File(blankEsp),
}),
plugin.GetIncompatibilities());