diff options
Diffstat (limited to 'source/Interpreter/CommandHistory.cpp')
| -rw-r--r-- | source/Interpreter/CommandHistory.cpp | 179 | 
1 files changed, 74 insertions, 105 deletions
| diff --git a/source/Interpreter/CommandHistory.cpp b/source/Interpreter/CommandHistory.cpp index ff87e528d36f6..c16f71374c7ed 100644 --- a/source/Interpreter/CommandHistory.cpp +++ b/source/Interpreter/CommandHistory.cpp @@ -9,134 +9,103 @@  #include <inttypes.h> -#include "lldb/Interpreter/CommandHistory.h"  #include "lldb/Host/StringConvert.h" +#include "lldb/Interpreter/CommandHistory.h"  using namespace lldb;  using namespace lldb_private; -CommandHistory::CommandHistory() : m_mutex(), m_history() -{} +CommandHistory::CommandHistory() : m_mutex(), m_history() {} -CommandHistory::~CommandHistory () -{} +CommandHistory::~CommandHistory() {} -size_t -CommandHistory::GetSize () const -{ -    std::lock_guard<std::recursive_mutex> guard(m_mutex); -    return m_history.size(); +size_t CommandHistory::GetSize() const { +  std::lock_guard<std::recursive_mutex> guard(m_mutex); +  return m_history.size();  } -bool -CommandHistory::IsEmpty () const -{ -    std::lock_guard<std::recursive_mutex> guard(m_mutex); -    return m_history.empty(); +bool CommandHistory::IsEmpty() const { +  std::lock_guard<std::recursive_mutex> guard(m_mutex); +  return m_history.empty();  } -const char* -CommandHistory::FindString (const char* input_str) const -{ -    std::lock_guard<std::recursive_mutex> guard(m_mutex); -    if (!input_str) -        return nullptr; -    if (input_str[0] != g_repeat_char) -        return nullptr; -    if (input_str[1] == '-') -    { -        bool success; -        size_t idx = StringConvert::ToUInt32 (input_str+2, 0, 0, &success); -        if (!success) -            return nullptr; -        if (idx > m_history.size()) -            return nullptr; -        idx = m_history.size() - idx; -        return m_history[idx].c_str(); -         -    } -    else if (input_str[1] == g_repeat_char) -    { -        if (m_history.empty()) -            return nullptr; -        else -            return m_history.back().c_str(); -    } -    else -    { -        bool success; -        uint32_t idx = StringConvert::ToUInt32 (input_str+1, 0, 0, &success); -        if (!success) -            return nullptr; -        if (idx >= m_history.size()) -            return nullptr; -        return m_history[idx].c_str(); -    } +llvm::Optional<llvm::StringRef> +CommandHistory::FindString(llvm::StringRef input_str) const { +  std::lock_guard<std::recursive_mutex> guard(m_mutex); +  if (input_str.size() < 2) +    return llvm::None; + +  if (input_str[0] != g_repeat_char) +    return llvm::None; + +  if (input_str[1] == g_repeat_char) { +    if (m_history.empty()) +      return llvm::None; +    return llvm::StringRef(m_history.back()); +  } + +  input_str = input_str.drop_front(); + +  size_t idx = 0; +  if (input_str.front() == '-') { +    if (input_str.drop_front(2).getAsInteger(0, idx)) +      return llvm::None; +    if (idx >= m_history.size()) +      return llvm::None; +    idx = m_history.size() - idx; +  } else { +    if (input_str.drop_front().getAsInteger(0, idx)) +      return llvm::None; +    if (idx >= m_history.size()) +      return llvm::None; +  } + +  return llvm::StringRef(m_history[idx]);  } -const char* -CommandHistory::GetStringAtIndex (size_t idx) const -{ -    std::lock_guard<std::recursive_mutex> guard(m_mutex); -    if (idx < m_history.size()) -        return m_history[idx].c_str(); -    return nullptr; +llvm::StringRef CommandHistory::GetStringAtIndex(size_t idx) const { +  std::lock_guard<std::recursive_mutex> guard(m_mutex); +  if (idx < m_history.size()) +    return m_history[idx]; +  return "";  } -const char* -CommandHistory::operator [] (size_t idx) const -{ -    return GetStringAtIndex(idx); +llvm::StringRef CommandHistory::operator[](size_t idx) const { +  return GetStringAtIndex(idx);  } -const char* -CommandHistory::GetRecentmostString () const -{ -    std::lock_guard<std::recursive_mutex> guard(m_mutex); -    if (m_history.empty()) -        return nullptr; -    return m_history.back().c_str(); +llvm::StringRef CommandHistory::GetRecentmostString() const { +  std::lock_guard<std::recursive_mutex> guard(m_mutex); +  if (m_history.empty()) +    return ""; +  return m_history.back();  } -void -CommandHistory::AppendString (const std::string& str, -                              bool reject_if_dupe) -{ -    std::lock_guard<std::recursive_mutex> guard(m_mutex); -    if (reject_if_dupe) -    { -        if (!m_history.empty()) -        { -            if (str == m_history.back()) -                return; -        } +void CommandHistory::AppendString(llvm::StringRef str, bool reject_if_dupe) { +  std::lock_guard<std::recursive_mutex> guard(m_mutex); +  if (reject_if_dupe) { +    if (!m_history.empty()) { +      if (str == m_history.back()) +        return;      } -    m_history.push_back(std::string(str)); +  } +  m_history.push_back(str);  } -void -CommandHistory::Clear () -{ -    std::lock_guard<std::recursive_mutex> guard(m_mutex); -    m_history.clear(); +void CommandHistory::Clear() { +  std::lock_guard<std::recursive_mutex> guard(m_mutex); +  m_history.clear();  } -void -CommandHistory::Dump (Stream& stream, -                      size_t start_idx, -                      size_t stop_idx) const -{ -    std::lock_guard<std::recursive_mutex> guard(m_mutex); -    stop_idx = std::min(stop_idx + 1, m_history.size()); -    for (size_t counter = start_idx; -         counter < stop_idx; -         counter++) -    { -        const std::string hist_item = m_history[counter]; -        if (!hist_item.empty()) -        { -            stream.Indent(); -            stream.Printf("%4" PRIu64 ": %s\n", (uint64_t)counter, hist_item.c_str()); -        } +void CommandHistory::Dump(Stream &stream, size_t start_idx, +                          size_t stop_idx) const { +  std::lock_guard<std::recursive_mutex> guard(m_mutex); +  stop_idx = std::min(stop_idx + 1, m_history.size()); +  for (size_t counter = start_idx; counter < stop_idx; counter++) { +    const std::string hist_item = m_history[counter]; +    if (!hist_item.empty()) { +      stream.Indent(); +      stream.Printf("%4" PRIu64 ": %s\n", (uint64_t)counter, hist_item.c_str());      } +  }  } | 
