From 98786ba3aabde67289de2f61b138efecd282da1e Mon Sep 17 00:00:00 2001 From: Peter Albrecht <albrecpe@gmail.com> Date: Mon, 29 Jan 2024 14:58:19 +0100 Subject: [PATCH] Add wildcard functionality to skill search --- .../skills_gui/memory/SkillManagerWrapper.cpp | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp b/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp index 92277c0eb..ff35703b3 100644 --- a/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp +++ b/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp @@ -54,6 +54,24 @@ namespace armarx::skills::gui } } + // check if search strings occur in the skill name in order + bool + matches(std::string skillName, std::vector<std::string>& searches) + { + size_t index = 0; + for (std::string& substring : searches) + { + size_t occurance = skillName.find(substring, index); + if (occurance == std::string::npos) + return false; + + + // we found an occurance + index = occurance; + } + return true; + } + void SkillManagerWrapper::filterSkillUpdate( std::map<skills::manager::dto::SkillID, skills::manager::dto::SkillDescription>& update) @@ -64,13 +82,16 @@ namespace armarx::skills::gui return; } - // TODO: whitespace to wildcard + std::vector<std::string> substrings = simox::alg::split(currentSkillSearch); + for (auto& string : substrings) + { + simox::alg::to_lower(string); + } - std::string key = simox::alg::to_lower(this->currentSkillSearch); for (auto it = update.begin(); it != update.end();) { - if (simox::alg::to_lower(skills::SkillID::FromIce(it->first).skillName).find(key)) + if (not matches(skills::SkillID::FromIce(it->first).skillName, substrings)) { it = update.erase(it); } -- GitLab