From 60da16e9d0512407989f6b3cb0227c605619be04 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Thu, 16 Jan 2025 17:09:50 +0000 Subject: [PATCH] Move MergeGroups() --- src/api/api_database.cpp | 40 ++++++++++++++++++++++++++++++++++ src/api/sorting/group_sort.cpp | 36 ------------------------------ src/api/sorting/group_sort.h | 3 --- 3 files changed, 40 insertions(+), 39 deletions(-) diff --git a/src/api/api_database.cpp b/src/api/api_database.cpp index c2332969..2d3579d7 100644 --- a/src/api/api_database.cpp +++ b/src/api/api_database.cpp @@ -35,6 +35,46 @@ #include "loot/exception/file_access_error.h" #include "loot/metadata/group.h" +namespace { +using loot::Group; + +std::vector MergeGroups(const std::vector& masterlistGroups, + const std::vector& userGroups) { + auto mergedGroups = masterlistGroups; + + std::vector newGroups; + for (const auto& userGroup : userGroups) { + auto groupIt = + std::find_if(mergedGroups.begin(), + mergedGroups.end(), + [&](const Group& existingGroup) { + return existingGroup.GetName() == userGroup.GetName(); + }); + + if (groupIt == mergedGroups.end()) { + newGroups.push_back(userGroup); + } else { + // Replace the masterlist group description with the userlist group + // description if the latter is not empty. + auto description = userGroup.GetDescription().empty() + ? groupIt->GetDescription() + : userGroup.GetDescription(); + + auto afterGroups = groupIt->GetAfterGroups(); + auto userAfterGroups = userGroup.GetAfterGroups(); + afterGroups.insert( + afterGroups.end(), userAfterGroups.begin(), userAfterGroups.end()); + + *groupIt = Group(userGroup.GetName(), afterGroups, description); + } + } + + mergedGroups.insert(mergedGroups.end(), newGroups.cbegin(), newGroups.cend()); + + return mergedGroups; +} +} + namespace loot { ApiDatabase::ApiDatabase( std::shared_ptr conditionEvaluator) : diff --git a/src/api/sorting/group_sort.cpp b/src/api/sorting/group_sort.cpp index f8ec51ca..78fd5649 100644 --- a/src/api/sorting/group_sort.cpp +++ b/src/api/sorting/group_sort.cpp @@ -332,40 +332,4 @@ std::vector GetGroupsPath(const GroupGraph& graph, return path; } - -std::vector MergeGroups(const std::vector& masterlistGroups, - const std::vector& userGroups) { - auto mergedGroups = masterlistGroups; - - std::vector newGroups; - for (const auto& userGroup : userGroups) { - auto groupIt = - std::find_if(mergedGroups.begin(), - mergedGroups.end(), - [&](const Group& existingGroup) { - return existingGroup.GetName() == userGroup.GetName(); - }); - - if (groupIt == mergedGroups.end()) { - newGroups.push_back(userGroup); - } else { - // Replace the masterlist group description with the userlist group - // description if the latter is not empty. - auto description = userGroup.GetDescription().empty() - ? groupIt->GetDescription() - : userGroup.GetDescription(); - - auto afterGroups = groupIt->GetAfterGroups(); - auto userAfterGroups = userGroup.GetAfterGroups(); - afterGroups.insert( - afterGroups.end(), userAfterGroups.begin(), userAfterGroups.end()); - - *groupIt = Group(userGroup.GetName(), afterGroups, description); } - } - - mergedGroups.insert(mergedGroups.end(), newGroups.cbegin(), newGroups.cend()); - - return mergedGroups; -} -} diff --git a/src/api/sorting/group_sort.h b/src/api/sorting/group_sort.h index 4ca9014f..72ca8b15 100644 --- a/src/api/sorting/group_sort.h +++ b/src/api/sorting/group_sort.h @@ -56,8 +56,5 @@ GetPredecessorGroups(const GroupGraph& groupGraph); std::vector GetGroupsPath(const GroupGraph& groupGraph, const std::string& fromGroupName, const std::string& toGroupName); - -std::vector MergeGroups(const std::vector& masterlistGroups, - const std::vector& userGroups); } #endif