mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
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:
@@ -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_;
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -297,7 +297,7 @@ TEST_P(
|
||||
File(blankEsm),
|
||||
}),
|
||||
plugin.GetLoadAfterFiles());
|
||||
EXPECT_EQ(std::set<File>({
|
||||
EXPECT_EQ(std::vector<File>({
|
||||
File(blankEsp),
|
||||
}),
|
||||
plugin.GetIncompatibilities());
|
||||
|
||||
Reference in New Issue
Block a user