Make PluginMetadata::GetCleanInfo() 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 88a1c6f6d1
commit d5881047cc
6 changed files with 18 additions and 24 deletions
+3 -3
View File
@@ -136,7 +136,7 @@ public:
* Get the plugin's clean plugin information.
* @return The PluginCleaningData objects that identify the plugin as clean.
*/
LOOT_API std::set<PluginCleaningData> GetCleanInfo() const;
LOOT_API std::vector<PluginCleaningData> GetCleanInfo() const;
/**
* Get the locations at which this plugin can be found.
@@ -212,7 +212,7 @@ public:
* @param info
* The clean information to set.
*/
LOOT_API void SetCleanInfo(const std::set<PluginCleaningData>& info);
LOOT_API void SetCleanInfo(const std::vector<PluginCleaningData>& info);
/**
* Set the plugin's locations.
@@ -274,7 +274,7 @@ private:
std::vector<Message> messages_;
std::vector<Tag> tags_;
std::vector<PluginCleaningData> dirtyInfo_;
std::set<PluginCleaningData> cleanInfo_;
std::vector<PluginCleaningData> cleanInfo_;
std::set<Location> locations_;
};
}
+3 -3
View File
@@ -170,12 +170,12 @@ PluginMetadata ConditionEvaluator::EvaluateAll(const PluginMetadata& pluginMetad
}
evaluatedMetadata.SetDirtyInfo(infoVector);
std::set<PluginCleaningData> infoSet;
infoVector.clear();
for (const auto& info : pluginMetadata.GetCleanInfo()) {
if (Evaluate(info, pluginMetadata.GetName()))
infoSet.insert(info);
infoVector.push_back(info);
}
evaluatedMetadata.SetCleanInfo(infoSet);
evaluatedMetadata.SetCleanInfo(infoVector);
}
return evaluatedMetadata;
+4 -11
View File
@@ -68,7 +68,7 @@ void PluginMetadata::MergeMetadata(const PluginMetadata& plugin) {
end(messages_), begin(plugin.messages_), end(plugin.messages_));
dirtyInfo_ = mergeVectors(dirtyInfo_, plugin.dirtyInfo_);
cleanInfo_.insert(begin(plugin.cleanInfo_), end(plugin.cleanInfo_));
cleanInfo_ = mergeVectors(cleanInfo_, plugin.cleanInfo_);
locations_.insert(begin(plugin.locations_), end(plugin.locations_));
return;
@@ -102,14 +102,7 @@ PluginMetadata PluginMetadata::NewMetadata(const PluginMetadata& plugin) const {
p.SetTags(diffVectors(tags_, plugin.tags_));
p.SetDirtyInfo(diffVectors(dirtyInfo_, plugin.dirtyInfo_));
set<PluginCleaningData> cleanDiff;
set_difference(begin(cleanInfo_),
end(cleanInfo_),
begin(plugin.cleanInfo_),
end(plugin.cleanInfo_),
inserter(cleanDiff, begin(cleanDiff)));
p.SetCleanInfo(cleanDiff);
p.SetCleanInfo(diffVectors(cleanInfo_, plugin.cleanInfo_));
set<Location> locationsDiff;
set_difference(begin(locations_),
@@ -144,7 +137,7 @@ std::vector<PluginCleaningData> PluginMetadata::GetDirtyInfo() const {
return dirtyInfo_;
}
std::set<PluginCleaningData> PluginMetadata::GetCleanInfo() const {
std::vector<PluginCleaningData> PluginMetadata::GetCleanInfo() const {
return cleanInfo_;
}
@@ -190,7 +183,7 @@ void PluginMetadata::SetDirtyInfo(
dirtyInfo_ = dirtyInfo;
}
void PluginMetadata::SetCleanInfo(const std::set<PluginCleaningData>& info) {
void PluginMetadata::SetCleanInfo(const std::vector<PluginCleaningData>& info) {
cleanInfo_ = info;
}
+1 -1
View File
@@ -118,7 +118,7 @@ struct convert<loot::PluginMetadata> {
}
if (node["clean"]) {
rhs.SetCleanInfo(
node["clean"].as<std::set<loot::PluginCleaningData>>());
node["clean"].as<std::vector<loot::PluginCleaningData>>());
}
if (node["url"])
rhs.SetLocations(node["url"].as<std::set<loot::Location>>());
@@ -197,7 +197,7 @@ TEST_P(ConditionEvaluatorTest, evaluateAllShouldEvaluateAllMetadataConditions) {
EXPECT_EQ(std::vector<Message>({message1}), plugin.GetMessages());
EXPECT_EQ(std::vector<Tag>({tag1}), plugin.GetTags());
EXPECT_EQ(std::vector<PluginCleaningData>({info1}), plugin.GetDirtyInfo());
EXPECT_EQ(std::set<PluginCleaningData>({info1}), plugin.GetCleanInfo());
EXPECT_EQ(std::vector<PluginCleaningData>({info1}), plugin.GetCleanInfo());
}
TEST_P(ConditionEvaluatorTest, evaluateAllShouldPreserveGroupExplicitness) {
@@ -247,7 +247,7 @@ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeCleanInfoData) {
plugin2.SetCleanInfo({info1, info2});
plugin1.MergeMetadata(plugin2);
EXPECT_EQ(std::set<PluginCleaningData>({info1, info2}),
EXPECT_EQ(std::vector<PluginCleaningData>({info1, info2}),
plugin1.GetCleanInfo());
}
@@ -419,7 +419,8 @@ TEST_P(
plugin2.SetCleanInfo({info1, info3});
PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
EXPECT_EQ(std::set<PluginCleaningData>({info2}), newMetadata.GetCleanInfo());
EXPECT_EQ(std::vector<PluginCleaningData>({info2}),
newMetadata.GetCleanInfo());
}
TEST_P(PluginMetadataTest,
@@ -843,7 +844,7 @@ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetCleanFieldIfCleanInfoExists) {
node = plugin;
EXPECT_EQ(plugin.GetCleanInfo(),
node["clean"].as<std::set<PluginCleaningData>>());
node["clean"].as<std::vector<PluginCleaningData>>());
}
TEST_P(PluginMetadataTest, encodingAsYamlShouldSetUrlFieldIfLocationsExist) {
@@ -891,7 +892,7 @@ TEST_P(PluginMetadataTest, decodingFromYamlShouldStoreAllGivenData) {
EXPECT_EQ(std::vector<PluginCleaningData>(
{PluginCleaningData(5, "utility", {}, 0, 1, 2)}),
plugin.GetDirtyInfo());
EXPECT_EQ(std::set<PluginCleaningData>({PluginCleaningData(6, "utility")}),
EXPECT_EQ(std::vector<PluginCleaningData>({PluginCleaningData(6, "utility")}),
plugin.GetCleanInfo());
EXPECT_EQ(std::set<Location>({Location("http://www.example.com")}),
plugin.GetLocations());
@@ -924,7 +925,7 @@ TEST_P(PluginMetadataTest,
PluginMetadata plugin = node.as<PluginMetadata>();
EXPECT_EQ("Blank\\.esp", plugin.GetName());
EXPECT_EQ(std::set<PluginCleaningData>({PluginCleaningData(5, "utility")}),
EXPECT_EQ(std::vector<PluginCleaningData>({PluginCleaningData(5, "utility")}),
plugin.GetCleanInfo());
}