mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
Make PluginMetadata::GetRequirements() return a std::vector
The collection is only ever iterated over, and the uniqueness and ordering don't matter.
This commit is contained in:
@@ -106,7 +106,7 @@ public:
|
||||
* Get the files that the plugin requires to be installed.
|
||||
* @return The files that the plugin requires to be installed.
|
||||
*/
|
||||
LOOT_API std::set<File> GetRequirements() const;
|
||||
LOOT_API std::vector<File> GetRequirements() const;
|
||||
|
||||
/**
|
||||
* Get the files that the plugin is incompatible with.
|
||||
@@ -177,7 +177,7 @@ public:
|
||||
* @param requirements
|
||||
* The files to set.
|
||||
*/
|
||||
LOOT_API void SetRequirements(const std::set<File>& requirements);
|
||||
LOOT_API void SetRequirements(const std::vector<File>& requirements);
|
||||
|
||||
/**
|
||||
* Set the files that the plugin must load after.
|
||||
@@ -269,7 +269,7 @@ private:
|
||||
std::string name_;
|
||||
std::optional<std::string> group_;
|
||||
std::vector<File> loadAfter_;
|
||||
std::set<File> requirements_;
|
||||
std::vector<File> requirements_;
|
||||
std::set<File> incompatibilities_;
|
||||
std::vector<Message> messages_;
|
||||
std::set<Tag> tags_;
|
||||
|
||||
@@ -134,14 +134,14 @@ PluginMetadata ConditionEvaluator::EvaluateAll(const PluginMetadata& pluginMetad
|
||||
}
|
||||
evaluatedMetadata.SetLoadAfterFiles(files);
|
||||
|
||||
std::set<File> fileSet;
|
||||
fileSet.clear();
|
||||
files.clear();
|
||||
for (const auto& file : pluginMetadata.GetRequirements()) {
|
||||
if (Evaluate(file.GetCondition()))
|
||||
fileSet.insert(file);
|
||||
files.push_back(file);
|
||||
}
|
||||
evaluatedMetadata.SetRequirements(fileSet);
|
||||
evaluatedMetadata.SetRequirements(files);
|
||||
|
||||
std::set<File> fileSet;
|
||||
fileSet.clear();
|
||||
for (const auto& file : pluginMetadata.GetIncompatibilities()) {
|
||||
if (Evaluate(file.GetCondition()))
|
||||
|
||||
@@ -58,7 +58,7 @@ void PluginMetadata::MergeMetadata(const PluginMetadata& plugin) {
|
||||
}
|
||||
|
||||
loadAfter_ = mergeVectors(loadAfter_, plugin.loadAfter_);
|
||||
requirements_.insert(begin(plugin.requirements_), end(plugin.requirements_));
|
||||
requirements_ = mergeVectors(requirements_, plugin.requirements_);
|
||||
incompatibilities_.insert(begin(plugin.incompatibilities_),
|
||||
end(plugin.incompatibilities_));
|
||||
|
||||
@@ -88,16 +88,9 @@ PluginMetadata PluginMetadata::NewMetadata(const PluginMetadata& plugin) const {
|
||||
|
||||
// Compare this plugin against the given plugin.
|
||||
p.SetLoadAfterFiles(diffVectors(loadAfter_, plugin.loadAfter_));
|
||||
p.SetRequirements(diffVectors(requirements_, plugin.requirements_));
|
||||
|
||||
set<File> filesDiff;
|
||||
filesDiff.clear();
|
||||
set_difference(begin(requirements_),
|
||||
end(requirements_),
|
||||
begin(plugin.requirements_),
|
||||
end(plugin.requirements_),
|
||||
inserter(filesDiff, begin(filesDiff)));
|
||||
p.SetRequirements(filesDiff);
|
||||
|
||||
filesDiff.clear();
|
||||
set_difference(begin(incompatibilities_),
|
||||
end(incompatibilities_),
|
||||
@@ -161,7 +154,7 @@ std::vector<File> PluginMetadata::GetLoadAfterFiles() const {
|
||||
return loadAfter_;
|
||||
}
|
||||
|
||||
std::set<File> PluginMetadata::GetRequirements() const { return requirements_; }
|
||||
std::vector<File> PluginMetadata::GetRequirements() const { return requirements_; }
|
||||
|
||||
std::set<File> PluginMetadata::GetIncompatibilities() const {
|
||||
return incompatibilities_;
|
||||
@@ -202,7 +195,7 @@ void PluginMetadata::SetLoadAfterFiles(const std::vector<File>& l) {
|
||||
loadAfter_ = l;
|
||||
}
|
||||
|
||||
void PluginMetadata::SetRequirements(const std::set<File>& r) {
|
||||
void PluginMetadata::SetRequirements(const std::vector<File>& r) {
|
||||
requirements_ = r;
|
||||
}
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@ struct convert<loot::PluginMetadata> {
|
||||
if (node["after"])
|
||||
rhs.SetLoadAfterFiles(node["after"].as<std::vector<loot::File>>());
|
||||
if (node["req"])
|
||||
rhs.SetRequirements(node["req"].as<std::set<loot::File>>());
|
||||
rhs.SetRequirements(node["req"].as<std::vector<loot::File>>());
|
||||
if (node["inc"])
|
||||
rhs.SetIncompatibilities(node["inc"].as<std::set<loot::File>>());
|
||||
if (node["msg"])
|
||||
|
||||
@@ -142,11 +142,11 @@ const std::vector<File>& PluginSortingData::GetUserLoadAfterFiles() const {
|
||||
return userLoadAfter_;
|
||||
}
|
||||
|
||||
const std::set<File>& PluginSortingData::GetMasterlistRequirements() const {
|
||||
const std::vector<File>& PluginSortingData::GetMasterlistRequirements() const {
|
||||
return masterlistReq_;
|
||||
}
|
||||
|
||||
const std::set<File>& PluginSortingData::GetUserRequirements() const {
|
||||
const std::vector<File>& PluginSortingData::GetUserRequirements() const {
|
||||
return userReq_;
|
||||
}
|
||||
const std::optional<size_t>& PluginSortingData::GetLoadOrderIndex() const {
|
||||
|
||||
@@ -52,8 +52,8 @@ public:
|
||||
|
||||
const std::vector<File>& GetMasterlistLoadAfterFiles() const;
|
||||
const std::vector<File>& GetUserLoadAfterFiles() const;
|
||||
const std::set<File>& GetMasterlistRequirements() const;
|
||||
const std::set<File>& GetUserRequirements() const;
|
||||
const std::vector<File>& GetMasterlistRequirements() const;
|
||||
const std::vector<File>& GetUserRequirements() const;
|
||||
|
||||
const std::optional<size_t>& GetLoadOrderIndex() const;
|
||||
|
||||
@@ -64,8 +64,8 @@ private:
|
||||
|
||||
std::vector<File> masterlistLoadAfter_;
|
||||
std::vector<File> userLoadAfter_;
|
||||
std::set<File> masterlistReq_;
|
||||
std::set<File> userReq_;
|
||||
std::vector<File> masterlistReq_;
|
||||
std::vector<File> userReq_;
|
||||
|
||||
std::optional<size_t> loadOrderIndex_;
|
||||
size_t numOverrideFormIDs;
|
||||
|
||||
@@ -657,7 +657,7 @@ TEST_P(
|
||||
ASSERT_NO_THROW(db_->LoadLists(masterlistPath, userlistPath_));
|
||||
|
||||
PluginMetadata newMetadata(blankDifferentEsp);
|
||||
newMetadata.SetRequirements(std::set<File>({File(masterFile)}));
|
||||
newMetadata.SetRequirements(std::vector<File>({File(masterFile)}));
|
||||
|
||||
db_->SetPluginUserMetadata(newMetadata);
|
||||
|
||||
@@ -677,7 +677,7 @@ TEST_P(DatabaseInterfaceTest,
|
||||
ASSERT_NO_THROW(db_->LoadLists(masterlistPath, userlistPath_));
|
||||
|
||||
PluginMetadata newMetadata(blankEsm);
|
||||
newMetadata.SetRequirements(std::set<File>({File(masterFile)}));
|
||||
newMetadata.SetRequirements(std::vector<File>({File(masterFile)}));
|
||||
|
||||
db_->SetPluginUserMetadata(newMetadata);
|
||||
|
||||
|
||||
@@ -193,7 +193,7 @@ TEST_P(ConditionEvaluatorTest, evaluateAllShouldEvaluateAllMetadataConditions) {
|
||||
std::set<File> expectedFileSet({file1});
|
||||
EXPECT_EQ("group1", plugin.GetGroup().value());
|
||||
EXPECT_EQ(expectedFiles, plugin.GetLoadAfterFiles());
|
||||
EXPECT_EQ(expectedFileSet, plugin.GetRequirements());
|
||||
EXPECT_EQ(expectedFiles, plugin.GetRequirements());
|
||||
EXPECT_EQ(expectedFileSet, plugin.GetIncompatibilities());
|
||||
EXPECT_EQ(std::vector<Message>({message1}), plugin.GetMessages());
|
||||
EXPECT_EQ(std::set<Tag>({tag1}), plugin.GetTags());
|
||||
|
||||
@@ -182,7 +182,7 @@ TEST_P(PluginMetadataTest, mergeMetadataShouldMergeRequirementData) {
|
||||
plugin2.SetRequirements({file1, file2});
|
||||
plugin1.MergeMetadata(plugin2);
|
||||
|
||||
EXPECT_EQ(std::set<File>({file1, file2}), plugin1.GetRequirements());
|
||||
EXPECT_EQ(std::vector<File>({file1, file2}), plugin1.GetRequirements());
|
||||
}
|
||||
|
||||
TEST_P(PluginMetadataTest, mergeMetadataShouldMergeIncompatibilityData) {
|
||||
@@ -340,7 +340,7 @@ TEST_P(
|
||||
plugin2.SetRequirements({file1, file3});
|
||||
PluginMetadata newMetadata = plugin1.NewMetadata(plugin2);
|
||||
|
||||
EXPECT_EQ(std::set<File>({file2}), newMetadata.GetRequirements());
|
||||
EXPECT_EQ(std::vector<File>({file2}), newMetadata.GetRequirements());
|
||||
}
|
||||
|
||||
TEST_P(
|
||||
@@ -794,7 +794,7 @@ TEST_P(PluginMetadataTest, encodingAsYamlShouldSetReqFieldIfRequirementsExist) {
|
||||
YAML::Node node;
|
||||
node = plugin;
|
||||
|
||||
EXPECT_EQ(plugin.GetRequirements(), node["req"].as<std::set<File>>());
|
||||
EXPECT_EQ(plugin.GetRequirements(), node["req"].as<std::vector<File>>());
|
||||
}
|
||||
|
||||
TEST_P(PluginMetadataTest,
|
||||
@@ -882,7 +882,7 @@ TEST_P(PluginMetadataTest, decodingFromYamlShouldStoreAllGivenData) {
|
||||
|
||||
EXPECT_EQ("Blank.esp", plugin.GetName());
|
||||
EXPECT_EQ(std::vector<File>({File("Blank.esm")}), plugin.GetLoadAfterFiles());
|
||||
EXPECT_EQ(std::set<File>({File("Blank.esm")}), plugin.GetRequirements());
|
||||
EXPECT_EQ(std::vector<File>({File("Blank.esm")}), plugin.GetRequirements());
|
||||
EXPECT_EQ(std::set<File>({File("Blank.esm")}), plugin.GetIncompatibilities());
|
||||
EXPECT_EQ(std::vector<Message>({Message(MessageType::say, "content")}),
|
||||
plugin.GetMessages());
|
||||
|
||||
Reference in New Issue
Block a user