diff --git a/src/MeoAssistant/Assistant.cpp b/src/MeoAssistant/Assistant.cpp index e5c6e08c76..9f1ce4a78c 100644 --- a/src/MeoAssistant/Assistant.cpp +++ b/src/MeoAssistant/Assistant.cpp @@ -1,6 +1,5 @@ #include "Assistant.h" -#include #include "AsstRanges.hpp" #include @@ -178,11 +177,9 @@ std::string asst::Assistant::get_uuid() const std::vector asst::Assistant::get_tasks_list() const { - std::vector result; std::unique_lock lock(m_mutex); - for (const auto& id : m_tasks_list | views::keys) { - result.emplace_back(id); - } + std::vector result(m_tasks_list.size()); + ranges::copy(m_tasks_list | views::keys, result.begin()); return result; } @@ -235,6 +232,7 @@ void Assistant::working_proc() if (!m_thread_idle && !m_tasks_list.empty()) { const auto [id, task_ptr] = m_tasks_list.front(); lock.unlock(); + // only one instance of working_proc running, unlock here to allow set_task_param to the running task json::value callback_json = json::object{ { "taskchain", task_ptr->get_task_chain() }, @@ -255,11 +253,7 @@ void Assistant::working_proc() } lock.unlock(); - auto run_msg = AsstMsg::TaskChainCompleted; - if (!ret) { - run_msg = AsstMsg::TaskChainError; - } - task_callback(run_msg, callback_json, this); + task_callback(ret ? AsstMsg::TaskChainCompleted : AsstMsg::TaskChainError, callback_json, this); if (!m_thread_idle && m_tasks_list.empty()) { callback_json["finished_tasks"] = json::array(finished_tasks); diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index 92711a25ee..004fae2089 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -594,10 +594,8 @@ bool asst::Controller::screencap() return false; } size_t header_size = data.size() - std_size; - bool is_all_zero = std::all_of(data.data() + header_size, data.data() + std_size, - [](uchar uch) -> bool { - return uch == 0; - }); + bool is_all_zero = + std::all_of(data.data() + header_size, data.data() + std_size, std::logical_not{}); if (is_all_zero) { return false; } @@ -621,10 +619,8 @@ bool asst::Controller::screencap() return false; } size_t header_size = unzip_data.size() - std_size; - bool is_all_zero = std::all_of(unzip_data.data() + header_size, unzip_data.data() + std_size, - [](uchar uch) -> bool { - return uch == 0; - }); + bool is_all_zero = + std::all_of(unzip_data.data() + header_size, unzip_data.data() + std_size, std::logical_not{}); if (is_all_zero) { return false; } diff --git a/src/MeoAssistant/CreditShopImageAnalyzer.cpp b/src/MeoAssistant/CreditShopImageAnalyzer.cpp index d1af89c947..2ed86a3b70 100644 --- a/src/MeoAssistant/CreditShopImageAnalyzer.cpp +++ b/src/MeoAssistant/CreditShopImageAnalyzer.cpp @@ -91,10 +91,7 @@ bool asst::CreditShopImageAnalyzer::whether_to_buy_analyze() } if (m_is_white_list) { - ranges::sort(m_need_to_buy, [&](const auto& lhs, const auto& rhs) -> bool { - return ranges::find(m_shopping_list, lhs.second) - < ranges::find(m_shopping_list, rhs.second); - }); + ranges::sort(m_need_to_buy, std::less{}, [&](const auto& pair) { return ranges::find(m_shopping_list, pair.second); }); } return !m_need_to_buy.empty(); diff --git a/src/MeoAssistant/DepotRecognitionTask.cpp b/src/MeoAssistant/DepotRecognitionTask.cpp index 43b7d33ab9..6524426036 100644 --- a/src/MeoAssistant/DepotRecognitionTask.cpp +++ b/src/MeoAssistant/DepotRecognitionTask.cpp @@ -30,9 +30,7 @@ bool asst::DepotRecognitionTask::swipe_and_analyze() while (true) { DepotImageAnalyzer analyzer(m_ctrler->get_image()); - auto future = std::async(std::launch::async, [&]() { - this->swipe(); - }); + auto future = std::async(std::launch::async, [&]() { swipe(); }); // 因为滑动不是完整的一页,有可能上一次识别过的物品,这次仍然在页面中 // 所以这个 begin pos 不能设置 diff --git a/src/MeoAssistant/InfrastFacilityImageAnalyzer.cpp b/src/MeoAssistant/InfrastFacilityImageAnalyzer.cpp index 8d54be2151..d99589237b 100644 --- a/src/MeoAssistant/InfrastFacilityImageAnalyzer.cpp +++ b/src/MeoAssistant/InfrastFacilityImageAnalyzer.cpp @@ -57,10 +57,7 @@ bool asst::InfrastFacilityImageAnalyzer::analyze() } const auto& cur_res = mm_analyzer.get_result(); - auto cur_max_iter = - ranges::max_element(cur_res, [](const MatchRect& lhs, const MatchRect& rhs) -> bool { - return lhs.score < rhs.score; - }); + auto cur_max_iter = ranges::max_element(cur_res, std::less{}, std::mem_fn(&MatchRect::score)); if (cur_max_iter == cur_res.cend()) { continue; } diff --git a/src/MeoAssistant/InfrastOperImageAnalyzer.cpp b/src/MeoAssistant/InfrastOperImageAnalyzer.cpp index aeea6ae50c..d557d5b9de 100644 --- a/src/MeoAssistant/InfrastOperImageAnalyzer.cpp +++ b/src/MeoAssistant/InfrastOperImageAnalyzer.cpp @@ -295,10 +295,7 @@ void asst::InfrastOperImageAnalyzer::skill_analyze() else if (possible_skills.size() > 1) { // 匹配得分最高的id作为基准,排除有识别错误,其他的技能混进来了的情况 // 即排除容器中,除了有同一个技能的不同等级,还有别的技能的情况 - auto max_iter = - ranges::max_element(possible_skills, [](const auto& lhs, const auto& rhs) -> bool { - return lhs.second.score < rhs.second.score; - }); + auto max_iter = ranges::max_element(possible_skills, std::less{}, [](const auto& pair) { return pair.second.score; }); double base_score = max_iter->second.score; std::string base_id = max_iter->first.id; size_t level_pos = 0; diff --git a/src/MeoAssistant/InfrastPowerTask.cpp b/src/MeoAssistant/InfrastPowerTask.cpp index 35cfce8d53..72ef210cb4 100644 --- a/src/MeoAssistant/InfrastPowerTask.cpp +++ b/src/MeoAssistant/InfrastPowerTask.cpp @@ -36,10 +36,7 @@ bool asst::InfrastPowerTask::_run() opers_detect(); } - auto find_iter = ranges::find_if(m_all_available_opers, - [&](const infrast::Oper& info) -> bool { - return info.selected; - }); + auto find_iter = ranges::find_if(m_all_available_opers, std::mem_fn(&infrast::Oper::selected)); bool need_shift = true; if (find_iter != m_all_available_opers.end()) { switch (m_work_mode) { diff --git a/src/MeoAssistant/ItemConfiger.cpp b/src/MeoAssistant/ItemConfiger.cpp index 14c3f03141..f6c63422ba 100644 --- a/src/MeoAssistant/ItemConfiger.cpp +++ b/src/MeoAssistant/ItemConfiger.cpp @@ -21,13 +21,8 @@ bool asst::ItemConfiger::parse(const json::value& json) m_ordered_material_item_id.clear(); m_ordered_material_item_id.reserve(material_sortid.size()); - for (const auto& item_id : material_sortid | views::keys) { - m_ordered_material_item_id.emplace_back(item_id); - } - ranges::sort(m_ordered_material_item_id, - [&](const std::string& lhs, const std::string& rhs) -> bool { - return material_sortid[lhs] < material_sortid[rhs]; - }); + ranges::copy(material_sortid | views::keys, std::back_inserter(m_ordered_material_item_id)); + ranges::sort(m_ordered_material_item_id, std::less{}, [&](const std::string& name) -> int { return material_sortid[name]; }); return true; } diff --git a/src/MeoAssistant/OcrImageAnalyzer.cpp b/src/MeoAssistant/OcrImageAnalyzer.cpp index 4bba8672c7..fefa2a32ed 100644 --- a/src/MeoAssistant/OcrImageAnalyzer.cpp +++ b/src/MeoAssistant/OcrImageAnalyzer.cpp @@ -194,11 +194,7 @@ void asst::OcrImageAnalyzer::sort_result_vertical() void asst::OcrImageAnalyzer::sort_result_by_score() { - ranges::sort(get_result(), - [](const TextRect& lhs, const TextRect& rhs) -> bool { - return lhs.score > rhs.score; - } - ); + ranges::sort(get_result(), std::greater{}, std::mem_fn(&TextRect::score)); } void asst::OcrImageAnalyzer::sort_result_by_required() diff --git a/src/MeoAssistant/RecruitConfiger.cpp b/src/MeoAssistant/RecruitConfiger.cpp index d259c284d0..3cbd17e6f4 100644 --- a/src/MeoAssistant/RecruitConfiger.cpp +++ b/src/MeoAssistant/RecruitConfiger.cpp @@ -35,9 +35,7 @@ bool asst::RecruitConfiger::parse(const json::value& json) } // 按干员等级排个序 - ranges::sort(m_all_opers, [](const auto& lhs, const auto& rhs) -> bool { - return lhs.level > rhs.level; - }); + ranges::sort(m_all_opers, std::greater{}, std::mem_fn(&RecruitOperInfo::level)); return true; } diff --git a/src/MeoAssistant/RoguelikeRecruitImageAnalyzer.cpp b/src/MeoAssistant/RoguelikeRecruitImageAnalyzer.cpp index e5e584d004..4ea2a71956 100644 --- a/src/MeoAssistant/RoguelikeRecruitImageAnalyzer.cpp +++ b/src/MeoAssistant/RoguelikeRecruitImageAnalyzer.cpp @@ -38,10 +38,7 @@ bool asst::RoguelikeRecruitImageAnalyzer::analyze() m_result.emplace_back(std::move(info)); } - auto first_un_req = ranges::find_if(m_result, - [&](const auto& info) -> bool { - return info.required == false; - }); + auto first_un_req = ranges::find_if(m_result, std::not_fn(std::mem_fn(&BattleRecruitOperInfo::required))); std::sort(first_un_req, m_result.end(), [&](const auto& lhs, const auto& rhs) -> bool { if (lhs.elite == rhs.elite) { diff --git a/src/MeoAssistant/StageDropsImageAnalyzer.cpp b/src/MeoAssistant/StageDropsImageAnalyzer.cpp index 4f3758e650..f712f2dff8 100644 --- a/src/MeoAssistant/StageDropsImageAnalyzer.cpp +++ b/src/MeoAssistant/StageDropsImageAnalyzer.cpp @@ -57,10 +57,7 @@ bool asst::StageDropsImageAnalyzer::analyze_stage_code() const auto& stages = Resrc.drops().get_all_stage_code(); std::vector stages_req(stages.cbegin(), stages.cend()); // 名字长的放前面 - ranges::sort(stages_req, - [](const std::string& lhs, const std::string& rhs) -> bool { - return lhs.size() > rhs.size(); - }); + ranges::sort(stages_req, std::greater{}, std::mem_fn(&std::string::size)); analyzer.set_required(std::move(stages_req)); if (!analyzer.analyze()) { @@ -288,7 +285,7 @@ bool asst::StageDropsImageAnalyzer::analyze_baseline() static const int v_threshold = task_ptr->rect_move.width; bool is_white = value >= threshold; - if (pre_hsv != pre_hsv.zeros()) { + if (pre_hsv != cv::Vec3i::zeros()) { is_white &= abs(pre_hsv[0] - hsv[0]) < h_threshold && abs(pre_hsv[1] - hsv[1]) < s_threshold &&