diff --git a/include/loot/metadata/plugin_metadata.h b/include/loot/metadata/plugin_metadata.h index 079c385a..5cec2dd1 100644 --- a/include/loot/metadata/plugin_metadata.h +++ b/include/loot/metadata/plugin_metadata.h @@ -142,7 +142,7 @@ public: * Get the locations at which this plugin can be found. * @return The locations at which this plugin can be found. */ - LOOT_API std::set GetLocations() const; + LOOT_API std::vector GetLocations() const; /** * Get the plugin's messages as SimpleMessage objects for the given language. @@ -219,7 +219,7 @@ public: * @param locations * The locations to set. */ - LOOT_API void SetLocations(const std::set& locations); + LOOT_API void SetLocations(const std::vector& locations); /** * Check if no plugin metadata is set. @@ -275,7 +275,7 @@ private: std::vector tags_; std::vector dirtyInfo_; std::vector cleanInfo_; - std::set locations_; + std::vector locations_; }; } diff --git a/src/api/metadata/plugin_metadata.cpp b/src/api/metadata/plugin_metadata.cpp index 8ec32c56..e79d5cbd 100644 --- a/src/api/metadata/plugin_metadata.cpp +++ b/src/api/metadata/plugin_metadata.cpp @@ -69,7 +69,7 @@ void PluginMetadata::MergeMetadata(const PluginMetadata& plugin) { dirtyInfo_ = mergeVectors(dirtyInfo_, plugin.dirtyInfo_); cleanInfo_ = mergeVectors(cleanInfo_, plugin.cleanInfo_); - locations_.insert(begin(plugin.locations_), end(plugin.locations_)); + locations_ = mergeVectors(locations_, plugin.locations_); return; } @@ -103,14 +103,7 @@ PluginMetadata PluginMetadata::NewMetadata(const PluginMetadata& plugin) const { p.SetTags(diffVectors(tags_, plugin.tags_)); p.SetDirtyInfo(diffVectors(dirtyInfo_, plugin.dirtyInfo_)); p.SetCleanInfo(diffVectors(cleanInfo_, plugin.cleanInfo_)); - - set locationsDiff; - set_difference(begin(locations_), - end(locations_), - begin(plugin.locations_), - end(plugin.locations_), - inserter(locationsDiff, begin(locationsDiff))); - p.SetLocations(locationsDiff); + p.SetLocations(diffVectors(locations_, plugin.locations_)); return p; } @@ -141,7 +134,9 @@ std::vector PluginMetadata::GetCleanInfo() const { return cleanInfo_; } -std::set PluginMetadata::GetLocations() const { return locations_; } +std::vector PluginMetadata::GetLocations() const { + return locations_; +} std::vector PluginMetadata::GetSimpleMessages( const std::string& language) const { @@ -187,7 +182,7 @@ void PluginMetadata::SetCleanInfo(const std::vector& info) { cleanInfo_ = info; } -void PluginMetadata::SetLocations(const std::set& locations) { +void PluginMetadata::SetLocations(const std::vector& locations) { locations_ = locations; } diff --git a/src/api/metadata/yaml/plugin_metadata.h b/src/api/metadata/yaml/plugin_metadata.h index be3b159d..571aade4 100644 --- a/src/api/metadata/yaml/plugin_metadata.h +++ b/src/api/metadata/yaml/plugin_metadata.h @@ -121,7 +121,7 @@ struct convert { node["clean"].as>()); } if (node["url"]) - rhs.SetLocations(node["url"].as>()); + rhs.SetLocations(node["url"].as>()); return true; } diff --git a/src/tests/api/internals/metadata/plugin_metadata_test.h b/src/tests/api/internals/metadata/plugin_metadata_test.h index b5e74ce2..cb839ccc 100644 --- a/src/tests/api/internals/metadata/plugin_metadata_test.h +++ b/src/tests/api/internals/metadata/plugin_metadata_test.h @@ -261,7 +261,8 @@ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeLocationData) { plugin2.SetLocations({location1, location2}); plugin1.MergeMetadata(plugin2); - EXPECT_EQ(std::set({location1, location2}), plugin1.GetLocations()); + EXPECT_EQ(std::vector({location1, location2}), + plugin1.GetLocations()); } TEST_P(PluginMetadataTest, newMetadataShouldUseSourcePluginName) { @@ -435,7 +436,7 @@ TEST_P(PluginMetadataTest, plugin2.SetLocations({location1, location3}); PluginMetadata newMetadata = plugin1.NewMetadata(plugin2); - EXPECT_EQ(std::set({location2}), newMetadata.GetLocations()); + EXPECT_EQ(std::vector({location2}), newMetadata.GetLocations()); } TEST_P(PluginMetadataTest, simpleMessagesShouldReturnMessagesAsSimpleMessages) { @@ -853,7 +854,7 @@ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetUrlFieldIfLocationsExist) { YAML::Node node; node = plugin; - EXPECT_EQ(plugin.GetLocations(), node["url"].as>()); + EXPECT_EQ(plugin.GetLocations(), node["url"].as>()); } TEST_P(PluginMetadataTest, decodingFromYamlShouldStoreAllGivenData) { @@ -894,7 +895,7 @@ TEST_P(PluginMetadataTest, decodingFromYamlShouldStoreAllGivenData) { plugin.GetDirtyInfo()); EXPECT_EQ(std::vector({PluginCleaningData(6, "utility")}), plugin.GetCleanInfo()); - EXPECT_EQ(std::set({Location("http://www.example.com")}), + EXPECT_EQ(std::vector({Location("http://www.example.com")}), plugin.GetLocations()); }