From 77a92c3204b95eaf2870605718b9099ab6ece56a Mon Sep 17 00:00:00 2001 From: nancy.liao <huihui.liao@greentest.com.cn> Date: 周一, 26 5月 2025 08:41:11 +0800 Subject: [PATCH] 匹配时添加了一个当前索引项 --- libscpi/src/externinterface.cpp | 95 +++++++++++++++++++++++++---------------------- 1 files changed, 50 insertions(+), 45 deletions(-) diff --git a/libscpi/src/externinterface.cpp b/libscpi/src/externinterface.cpp index 222a863..1713166 100644 --- a/libscpi/src/externinterface.cpp +++ b/libscpi/src/externinterface.cpp @@ -8,7 +8,12 @@ #include <sstream> CPatternResult* g_pattern_results = new (std::nothrow) CPatternResult(); + int g_pattern_count = 0; + +//static std::vector<std::string_view> currentCommandGroup; + +static int currentIndex; class Segment { public: @@ -82,52 +87,45 @@ } static bool match_all_segments(const std::vector<std::string>& stringList, - const std::vector<Segment>& vecSegment) - { - int currentIndex = 0; - for (size_t i = 0; i < vecSegment.size(); i++) + const std::vector<Segment>& vecSegment) { + size_t currentIndex = 0; + for (const auto& segment : vecSegment) { - auto currentSegment = vecSegment[i]; - - if (currentSegment.is_required) { - for (const auto& option : currentSegment.options) - { - //褰撶储寮昳ndex瓒呰繃杈撳叆鍙傛暟鐨勮瘝缁勫ぇ灏� 鍒欒〃绀哄懡浠や笉鍖归厤 - if(currentIndex >= stringList.size()) - { - return false; - } - if (stringList[currentIndex] != option) - { - return false; - } else { - currentIndex += 1; - } - break; - } - } - else if (currentSegment.is_variable) + if (currentIndex >= stringList.size()) { - if (stringList.size() == vecSegment.size()) + return false; + } + if (segment.is_required) + { + bool matched = false; + for (const auto& option : segment.options) { - auto vecTempSegments = currentSegment.options; - for (const auto& option : vecTempSegments) + if (stringList[currentIndex] == option) { - if (stringList[currentIndex] != option) - { - return false; - } else { - currentIndex += 1; - } + matched = true; break; } } + if (!matched) + { + return false; + } + currentIndex++; } - else { - currentIndex += 1; + else if (segment.is_variable) + { + // 鍙彉鍙傛暟锛氱洿鎺ヨ烦杩� + currentIndex++; + } else + { + + if (segment.options.empty() || stringList[currentIndex] != segment.options[0]) { + return false; + } + currentIndex++; } } - return true; + return currentIndex == stringList.size(); } static std::vector<Segment> extract_all_segments(const std::string& pattern) @@ -228,8 +226,12 @@ } }; +char* currentPattern() +{ + return g_pattern_results[currentIndex].commandData; +} // 鍏ㄥ眬绠$悊鍑芥暟瀹炵幇 -void add_pattern_to_global(const std::vector<Segment>& segments) +void add_pattern_to_global(const char* pattern, const std::vector<Segment>& segments) { // 閲嶆柊鍒嗛厤鍐呭瓨 CPatternResult* new_results = new CPatternResult[g_pattern_count + 1]; @@ -244,7 +246,6 @@ CPatternResult& new_item = new_results[g_pattern_count]; new_item.segments_count = static_cast<int>(segments.size()); new_item.segments = new CSegment[segments.size()]; - for (size_t i = 0; i < segments.size(); ++i) { const auto& seg = segments[i]; @@ -288,14 +289,23 @@ int get_pattern_count() { return g_pattern_count; } - +void clearCurrentGroup() +{ + currentIndex = -1; + //currentCommandGroup.clear(); +} void parse_pattern_global(const char* pattern) { auto segments = PatternParser::extract_all_segments(pattern); - add_pattern_to_global(segments); + add_pattern_to_global(pattern,segments); } +void setCurrentIndex(int index) +{ + currentIndex = index; +} +//pattern_index 鍖归厤缁勭殑涓嬫爣 int match_segments_global(const char* input, int pattern_index) { if (pattern_index < 0 || pattern_index >= g_pattern_count) @@ -339,9 +349,4 @@ } return PatternParser::match_all_segments(inputList, segments) ? 1 : 0; -} - -CPatternResult *GetInstance() -{ - return g_pattern_results; } -- Gitblit v1.9.1