Make PluginMetadata::GetDirtyInfo() 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 eeff7a9283
commit 88a1c6f6d1
6 changed files with 19 additions and 25 deletions
+3 -3
View File
@@ -130,7 +130,7 @@ public:
* Get the plugin's dirty plugin information.
* @return The PluginCleaningData objects that identify the plugin as dirty.
*/
LOOT_API std::set<PluginCleaningData> GetDirtyInfo() const;
LOOT_API std::vector<PluginCleaningData> GetDirtyInfo() const;
/**
* Get the plugin's clean plugin information.
@@ -205,7 +205,7 @@ public:
* @param info
* The dirty information to set.
*/
LOOT_API void SetDirtyInfo(const std::set<PluginCleaningData>& info);
LOOT_API void SetDirtyInfo(const std::vector<PluginCleaningData>& info);
/**
* Set the plugin's clean information.
@@ -273,7 +273,7 @@ private:
std::vector<File> incompatibilities_;
std::vector<Message> messages_;
std::vector<Tag> tags_;
std::set<PluginCleaningData> dirtyInfo_;
std::vector<PluginCleaningData> dirtyInfo_;
std::set<PluginCleaningData> cleanInfo_;
std::set<Location> locations_;
};
+4 -4
View File
@@ -163,14 +163,14 @@ PluginMetadata ConditionEvaluator::EvaluateAll(const PluginMetadata& pluginMetad
evaluatedMetadata.SetTags(tags);
if (!evaluatedMetadata.IsRegexPlugin()) {
std::set<PluginCleaningData> infoSet;
std::vector<PluginCleaningData> infoVector;
for (const auto& info : pluginMetadata.GetDirtyInfo()) {
if (Evaluate(info, pluginMetadata.GetName()))
infoSet.insert(info);
infoVector.push_back(info);
}
evaluatedMetadata.SetDirtyInfo(infoSet);
evaluatedMetadata.SetDirtyInfo(infoVector);
infoSet.clear();
std::set<PluginCleaningData> infoSet;
for (const auto& info : pluginMetadata.GetCleanInfo()) {
if (Evaluate(info, pluginMetadata.GetName()))
infoSet.insert(info);
+4 -11
View File
@@ -67,7 +67,7 @@ void PluginMetadata::MergeMetadata(const PluginMetadata& plugin) {
messages_.insert(
end(messages_), begin(plugin.messages_), end(plugin.messages_));
dirtyInfo_.insert(begin(plugin.dirtyInfo_), end(plugin.dirtyInfo_));
dirtyInfo_ = mergeVectors(dirtyInfo_, plugin.dirtyInfo_);
cleanInfo_.insert(begin(plugin.cleanInfo_), end(plugin.cleanInfo_));
locations_.insert(begin(plugin.locations_), end(plugin.locations_));
@@ -101,14 +101,7 @@ PluginMetadata PluginMetadata::NewMetadata(const PluginMetadata& plugin) const {
p.SetMessages(mDiff);
p.SetTags(diffVectors(tags_, plugin.tags_));
set<PluginCleaningData> dirtDiff;
set_difference(begin(dirtyInfo_),
end(dirtyInfo_),
begin(plugin.dirtyInfo_),
end(plugin.dirtyInfo_),
inserter(dirtDiff, begin(dirtDiff)));
p.SetDirtyInfo(dirtDiff);
p.SetDirtyInfo(diffVectors(dirtyInfo_, plugin.dirtyInfo_));
set<PluginCleaningData> cleanDiff;
set_difference(begin(cleanInfo_),
@@ -147,7 +140,7 @@ std::vector<Message> PluginMetadata::GetMessages() const { return messages_; }
std::vector<Tag> PluginMetadata::GetTags() const { return tags_; }
std::set<PluginCleaningData> PluginMetadata::GetDirtyInfo() const {
std::vector<PluginCleaningData> PluginMetadata::GetDirtyInfo() const {
return dirtyInfo_;
}
@@ -193,7 +186,7 @@ void PluginMetadata::SetMessages(const std::vector<Message>& m) {
void PluginMetadata::SetTags(const std::vector<Tag>& t) { tags_ = t; }
void PluginMetadata::SetDirtyInfo(
const std::set<PluginCleaningData>& dirtyInfo) {
const std::vector<PluginCleaningData>& dirtyInfo) {
dirtyInfo_ = dirtyInfo;
}
+1 -1
View File
@@ -114,7 +114,7 @@ struct convert<loot::PluginMetadata> {
rhs.SetTags(node["tag"].as<std::vector<loot::Tag>>());
if (node["dirty"]) {
rhs.SetDirtyInfo(
node["dirty"].as<std::set<loot::PluginCleaningData>>());
node["dirty"].as<std::vector<loot::PluginCleaningData>>());
}
if (node["clean"]) {
rhs.SetCleanInfo(
@@ -196,7 +196,7 @@ TEST_P(ConditionEvaluatorTest, evaluateAllShouldEvaluateAllMetadataConditions) {
EXPECT_EQ(expectedFiles, plugin.GetIncompatibilities());
EXPECT_EQ(std::vector<Message>({message1}), plugin.GetMessages());
EXPECT_EQ(std::vector<Tag>({tag1}), plugin.GetTags());
EXPECT_EQ(std::set<PluginCleaningData>({info1}), plugin.GetDirtyInfo());
EXPECT_EQ(std::vector<PluginCleaningData>({info1}), plugin.GetDirtyInfo());
EXPECT_EQ(std::set<PluginCleaningData>({info1}), plugin.GetCleanInfo());
}
@@ -234,7 +234,7 @@ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeDirtyInfoData) {
plugin2.SetDirtyInfo({info1, info2});
plugin1.MergeMetadata(plugin2);
EXPECT_EQ(std::set<PluginCleaningData>({info1, info2}),
EXPECT_EQ(std::vector<PluginCleaningData>({info1, info2}),
plugin1.GetDirtyInfo());
}
TEST_P(PluginMetadataTest, mergeMetadataShouldMergeCleanInfoData) {
@@ -402,7 +402,8 @@ TEST_P(
plugin2.SetDirtyInfo({info1, info3});
PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
EXPECT_EQ(std::set<PluginCleaningData>({info2}), newMetadata.GetDirtyInfo());
EXPECT_EQ(std::vector<PluginCleaningData>({info2}),
newMetadata.GetDirtyInfo());
}
TEST_P(
@@ -832,7 +833,7 @@ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetDirtyFieldIfDirtyInfoExists) {
node = plugin;
EXPECT_EQ(plugin.GetDirtyInfo(),
node["dirty"].as<std::set<PluginCleaningData>>());
node["dirty"].as<std::vector<PluginCleaningData>>());
}
TEST_P(PluginMetadataTest, encodingAsYamlShouldSetCleanFieldIfCleanInfoExists) {
@@ -887,7 +888,7 @@ TEST_P(PluginMetadataTest, decodingFromYamlShouldStoreAllGivenData) {
EXPECT_EQ(std::vector<Message>({Message(MessageType::say, "content")}),
plugin.GetMessages());
EXPECT_EQ(std::vector<Tag>({Tag("Relev")}), plugin.GetTags());
EXPECT_EQ(std::set<PluginCleaningData>(
EXPECT_EQ(std::vector<PluginCleaningData>(
{PluginCleaningData(5, "utility", {}, 0, 1, 2)}),
plugin.GetDirtyInfo());
EXPECT_EQ(std::set<PluginCleaningData>({PluginCleaningData(6, "utility")}),
@@ -908,7 +909,7 @@ TEST_P(PluginMetadataTest,
PluginMetadata plugin = node.as<PluginMetadata>();
EXPECT_EQ("Blank\\.esp", plugin.GetName());
EXPECT_EQ(std::set<PluginCleaningData>(
EXPECT_EQ(std::vector<PluginCleaningData>(
{PluginCleaningData(5, "utility", {}, 0, 1, 2)}),
plugin.GetDirtyInfo());
}