summaryrefslogtreecommitdiffstats
path: root/tools/lldb-mi/MIUtilParse.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-mi/MIUtilParse.h')
-rw-r--r--tools/lldb-mi/MIUtilParse.h93
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;
+};
+
+}
OpenPOWER on IntegriCloud