From 88a1c6f6d1be0a5ed59409c8e04f192e095d1413 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Mon, 8 Jun 2020 20:47:44 +0100 Subject: [PATCH] Make PluginMetadata::GetDirtyInfo() return a std::vector The collection is only ever iterated over, and the uniqueness and ordering don't matter. --- include/loot/metadata/plugin_metadata.h | 6 +++--- src/api/metadata/condition_evaluator.cpp | 8 ++++---- src/api/metadata/plugin_metadata.cpp | 15 ++++----------- src/api/metadata/yaml/plugin_metadata.h | 2 +- .../internals/metadata/condition_evaluator_test.h | 2 +- .../api/internals/metadata/plugin_metadata_test.h | 11 ++++++----- 6 files changed, 19 insertions(+), 25 deletions(-) diff --git a/include/loot/metadata/plugin_metadata.h b/include/loot/metadata/plugin_metadata.h index 14c3dc16..6ae34391 100644 --- a/include/loot/metadata/plugin_metadata.h +++ b/include/loot/metadata/plugin_metadata.h @@ -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 GetDirtyInfo() const; + LOOT_API std::vector 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& info); + LOOT_API void SetDirtyInfo(const std::vector& info); /** * Set the plugin's clean information. @@ -273,7 +273,7 @@ private: std::vector incompatibilities_; std::vector messages_; std::vector tags_; - std::set dirtyInfo_; + std::vector dirtyInfo_; std::set cleanInfo_; std::set locations_; }; diff --git a/src/api/metadata/condition_evaluator.cpp b/src/api/metadata/condition_evaluator.cpp index b8660e67..067b93b6 100644 --- a/src/api/metadata/condition_evaluator.cpp +++ b/src/api/metadata/condition_evaluator.cpp @@ -163,14 +163,14 @@ PluginMetadata ConditionEvaluator::EvaluateAll(const PluginMetadata& pluginMetad evaluatedMetadata.SetTags(tags); if (!evaluatedMetadata.IsRegexPlugin()) { - std::set infoSet; + std::vector 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 infoSet; for (const auto& info : pluginMetadata.GetCleanInfo()) { if (Evaluate(info, pluginMetadata.GetName())) infoSet.insert(info); diff --git a/src/api/metadata/plugin_metadata.cpp b/src/api/metadata/plugin_metadata.cpp index 18b346d4..467b0330 100644 --- a/src/api/metadata/plugin_metadata.cpp +++ b/src/api/metadata/plugin_metadata.cpp @@ -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 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 cleanDiff; set_difference(begin(cleanInfo_), @@ -147,7 +140,7 @@ std::vector PluginMetadata::GetMessages() const { return messages_; } std::vector PluginMetadata::GetTags() const { return tags_; } -std::set PluginMetadata::GetDirtyInfo() const { +std::vector PluginMetadata::GetDirtyInfo() const { return dirtyInfo_; } @@ -193,7 +186,7 @@ void PluginMetadata::SetMessages(const std::vector& m) { void PluginMetadata::SetTags(const std::vector& t) { tags_ = t; } void PluginMetadata::SetDirtyInfo( - const std::set& dirtyInfo) { + const std::vector& dirtyInfo) { dirtyInfo_ = dirtyInfo; } diff --git a/src/api/metadata/yaml/plugin_metadata.h b/src/api/metadata/yaml/plugin_metadata.h index 7c71a23b..ba56cc7f 100644 --- a/src/api/metadata/yaml/plugin_metadata.h +++ b/src/api/metadata/yaml/plugin_metadata.h @@ -114,7 +114,7 @@ struct convert { rhs.SetTags(node["tag"].as>()); if (node["dirty"]) { rhs.SetDirtyInfo( - node["dirty"].as>()); + node["dirty"].as>()); } if (node["clean"]) { rhs.SetCleanInfo( diff --git a/src/tests/api/internals/metadata/condition_evaluator_test.h b/src/tests/api/internals/metadata/condition_evaluator_test.h index ac01af1c..74f92128 100644 --- a/src/tests/api/internals/metadata/condition_evaluator_test.h +++ b/src/tests/api/internals/metadata/condition_evaluator_test.h @@ -196,7 +196,7 @@ TEST_P(ConditionEvaluatorTest, evaluateAllShouldEvaluateAllMetadataConditions) { EXPECT_EQ(expectedFiles, plugin.GetIncompatibilities()); EXPECT_EQ(std::vector({message1}), plugin.GetMessages()); EXPECT_EQ(std::vector({tag1}), plugin.GetTags()); - EXPECT_EQ(std::set({info1}), plugin.GetDirtyInfo()); + EXPECT_EQ(std::vector({info1}), plugin.GetDirtyInfo()); EXPECT_EQ(std::set({info1}), plugin.GetCleanInfo()); } diff --git a/src/tests/api/internals/metadata/plugin_metadata_test.h b/src/tests/api/internals/metadata/plugin_metadata_test.h index 1de8b5e8..67a3d5c0 100644 --- a/src/tests/api/internals/metadata/plugin_metadata_test.h +++ b/src/tests/api/internals/metadata/plugin_metadata_test.h @@ -234,7 +234,7 @@ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeDirtyInfoData) { plugin2.SetDirtyInfo({info1, info2}); plugin1.MergeMetadata(plugin2); - EXPECT_EQ(std::set({info1, info2}), + EXPECT_EQ(std::vector({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({info2}), newMetadata.GetDirtyInfo()); + EXPECT_EQ(std::vector({info2}), + newMetadata.GetDirtyInfo()); } TEST_P( @@ -832,7 +833,7 @@ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetDirtyFieldIfDirtyInfoExists) { node = plugin; EXPECT_EQ(plugin.GetDirtyInfo(), - node["dirty"].as>()); + node["dirty"].as>()); } TEST_P(PluginMetadataTest, encodingAsYamlShouldSetCleanFieldIfCleanInfoExists) { @@ -887,7 +888,7 @@ TEST_P(PluginMetadataTest, decodingFromYamlShouldStoreAllGivenData) { EXPECT_EQ(std::vector({Message(MessageType::say, "content")}), plugin.GetMessages()); EXPECT_EQ(std::vector({Tag("Relev")}), plugin.GetTags()); - EXPECT_EQ(std::set( + EXPECT_EQ(std::vector( {PluginCleaningData(5, "utility", {}, 0, 1, 2)}), plugin.GetDirtyInfo()); EXPECT_EQ(std::set({PluginCleaningData(6, "utility")}), @@ -908,7 +909,7 @@ TEST_P(PluginMetadataTest, PluginMetadata plugin = node.as(); EXPECT_EQ("Blank\\.esp", plugin.GetName()); - EXPECT_EQ(std::set( + EXPECT_EQ(std::vector( {PluginCleaningData(5, "utility", {}, 0, 1, 2)}), plugin.GetDirtyInfo()); }