forked from OSchip/llvm-project
94 lines
2.4 KiB
C++
94 lines
2.4 KiB
C++
//===-- 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;
|
|
};
|
|
|
|
}
|