diff options
Diffstat (limited to 'tools/lldb-mi/MIUtilParse.h')
-rw-r--r-- | tools/lldb-mi/MIUtilParse.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/tools/lldb-mi/MIUtilParse.h b/tools/lldb-mi/MIUtilParse.h new file mode 100644 index 0000000..d356958 --- /dev/null +++ b/tools/lldb-mi/MIUtilParse.h @@ -0,0 +1,93 @@ +//===-- MIUtilParse.h ------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#pragma once + +// Third party headers: +#include "../lib/Support/regex_impl.h" + +// In-house headers: +#include "MIUtilString.h" + +namespace MIUtilParse +{ + +//++ ============================================================================ +// Details: MI common code utility class. Used to parse the output +// returned from lldb commands using regex. +//-- +class CRegexParser +{ + public: + // Helper class for keeping track of regex matches. + class Match + { + friend CRegexParser; + public: + /* ctor */ explicit Match(size_t nmatches) + : m_matchStrs(nmatches), m_maxMatches(nmatches) + { + } + size_t + GetMatchCount() const + { + return m_matchStrs.size(); + } + CMIUtilString + GetMatchAtIndex(size_t i) const + { + if (m_matchStrs.size() > i) + return m_matchStrs[i]; + return CMIUtilString(); + } + private: + CMIUtilString::VecString_t m_matchStrs; + const size_t m_maxMatches; + }; + + // Methods: + // Compile the regular expression. + /* ctor */ explicit CRegexParser(const char *regexStr); + + // Free the memory used by the regular expression. + /* dtor */ ~CRegexParser(); + + // No copies + CRegexParser(const CRegexParser&) = delete; + void operator=(CRegexParser&) = delete; + + // Return the match at the index. + int + GetMatchCount(const Match& match) const + { + if (m_isValid) + return match.GetMatchCount(); + return 0; + } + + bool + IsValid() const + { + return m_isValid; + } + + // Match the input against the regular expression. Return an error + // if the number of matches is less than minMatches. If the default + // minMatches value of 0 is passed, an error will be returned if + // the number of matches is less than the maxMatches value used to + // initialize Match. + bool + Execute(const char *input, Match& match, size_t minMatches = 0); + + private: + llvm_regex_t m_emma; + const bool m_isValid; +}; + +} |