From d5881047ccf36314461fe70c37e1eca758b1906f Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Mon, 8 Jun 2020 20:57:24 +0100 Subject: [PATCH] Make PluginMetadata::GetCleanInfo() 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 | 6 +++--- 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, 18 insertions(+), 24 deletions(-) diff --git a/include/loot/metadata/plugin_metadata.h b/include/loot/metadata/plugin_metadata.h index 6ae34391..079c385a 100644 --- a/include/loot/metadata/plugin_metadata.h +++ b/include/loot/metadata/plugin_metadata.h @@ -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 GetCleanInfo() const; + LOOT_API std::vector 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& info); + LOOT_API void SetCleanInfo(const std::vector& info); /** * Set the plugin's locations. @@ -274,7 +274,7 @@ private: std::vector messages_; std::vector tags_; std::vector dirtyInfo_; - std::set cleanInfo_; + std::vector cleanInfo_; std::set locations_; }; } diff --git a/src/api/metadata/condition_evaluator.cpp b/src/api/metadata/condition_evaluator.cpp index 067b93b6..41be72c1 100644 --- a/src/api/metadata/condition_evaluator.cpp +++ b/src/api/metadata/condition_evaluator.cpp @@ -170,12 +170,12 @@ PluginMetadata ConditionEvaluator::EvaluateAll(const PluginMetadata& pluginMetad } evaluatedMetadata.SetDirtyInfo(infoVector); - std::set 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; diff --git a/src/api/metadata/plugin_metadata.cpp b/src/api/metadata/plugin_metadata.cpp index 467b0330..8ec32c56 100644 --- a/src/api/metadata/plugin_metadata.cpp +++ b/src/api/metadata/plugin_metadata.cpp @@ -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 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 locationsDiff; set_difference(begin(locations_), @@ -144,7 +137,7 @@ std::vector PluginMetadata::GetDirtyInfo() const { return dirtyInfo_; } -std::set PluginMetadata::GetCleanInfo() const { +std::vector PluginMetadata::GetCleanInfo() const { return cleanInfo_; } @@ -190,7 +183,7 @@ void PluginMetadata::SetDirtyInfo( dirtyInfo_ = dirtyInfo; } -void PluginMetadata::SetCleanInfo(const std::set& info) { +void PluginMetadata::SetCleanInfo(const std::vector& info) { cleanInfo_ = info; } diff --git a/src/api/metadata/yaml/plugin_metadata.h b/src/api/metadata/yaml/plugin_metadata.h index ba56cc7f..be3b159d 100644 --- a/src/api/metadata/yaml/plugin_metadata.h +++ b/src/api/metadata/yaml/plugin_metadata.h @@ -118,7 +118,7 @@ struct convert { } if (node["clean"]) { rhs.SetCleanInfo( - node["clean"].as>()); + node["clean"].as>()); } if (node["url"]) rhs.SetLocations(node["url"].as>()); diff --git a/src/tests/api/internals/metadata/condition_evaluator_test.h b/src/tests/api/internals/metadata/condition_evaluator_test.h index 74f92128..0c1c7572 100644 --- a/src/tests/api/internals/metadata/condition_evaluator_test.h +++ b/src/tests/api/internals/metadata/condition_evaluator_test.h @@ -197,7 +197,7 @@ TEST_P(ConditionEvaluatorTest, evaluateAllShouldEvaluateAllMetadataConditions) { EXPECT_EQ(std::vector({message1}), plugin.GetMessages()); EXPECT_EQ(std::vector({tag1}), plugin.GetTags()); EXPECT_EQ(std::vector({info1}), plugin.GetDirtyInfo()); - EXPECT_EQ(std::set({info1}), plugin.GetCleanInfo()); + EXPECT_EQ(std::vector({info1}), plugin.GetCleanInfo()); } TEST_P(ConditionEvaluatorTest, evaluateAllShouldPreserveGroupExplicitness) { diff --git a/src/tests/api/internals/metadata/plugin_metadata_test.h b/src/tests/api/internals/metadata/plugin_metadata_test.h index 67a3d5c0..b5e74ce2 100644 --- a/src/tests/api/internals/metadata/plugin_metadata_test.h +++ b/src/tests/api/internals/metadata/plugin_metadata_test.h @@ -247,7 +247,7 @@ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeCleanInfoData) { plugin2.SetCleanInfo({info1, info2}); plugin1.MergeMetadata(plugin2); - EXPECT_EQ(std::set({info1, info2}), + EXPECT_EQ(std::vector({info1, info2}), plugin1.GetCleanInfo()); } @@ -419,7 +419,8 @@ TEST_P( plugin2.SetCleanInfo({info1, info3}); PluginMetadata newMetadata = plugin1.NewMetadata(plugin2); - EXPECT_EQ(std::set({info2}), newMetadata.GetCleanInfo()); + EXPECT_EQ(std::vector({info2}), + newMetadata.GetCleanInfo()); } TEST_P(PluginMetadataTest, @@ -843,7 +844,7 @@ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetCleanFieldIfCleanInfoExists) { node = plugin; EXPECT_EQ(plugin.GetCleanInfo(), - node["clean"].as>()); + node["clean"].as>()); } TEST_P(PluginMetadataTest, encodingAsYamlShouldSetUrlFieldIfLocationsExist) { @@ -891,7 +892,7 @@ TEST_P(PluginMetadataTest, decodingFromYamlShouldStoreAllGivenData) { EXPECT_EQ(std::vector( {PluginCleaningData(5, "utility", {}, 0, 1, 2)}), plugin.GetDirtyInfo()); - EXPECT_EQ(std::set({PluginCleaningData(6, "utility")}), + EXPECT_EQ(std::vector({PluginCleaningData(6, "utility")}), plugin.GetCleanInfo()); EXPECT_EQ(std::set({Location("http://www.example.com")}), plugin.GetLocations()); @@ -924,7 +925,7 @@ TEST_P(PluginMetadataTest, PluginMetadata plugin = node.as(); EXPECT_EQ("Blank\\.esp", plugin.GetName()); - EXPECT_EQ(std::set({PluginCleaningData(5, "utility")}), + EXPECT_EQ(std::vector({PluginCleaningData(5, "utility")}), plugin.GetCleanInfo()); }