diff options
author | emaste <emaste@FreeBSD.org> | 2014-11-26 16:48:12 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2014-11-26 16:48:12 +0000 |
commit | 0147dda7de9580d13778ecb4c9e92b83b7a63911 (patch) | |
tree | b16dc95f693ed59342b6141cd3fd9f59a6cd7e7e /contrib/llvm/tools/lldb/source/Utility/StringLexer.cpp | |
parent | bfd4c39c61ae9b29542625bb12b6f7f4b1f8c727 (diff) | |
parent | 01ee1789d6aa7294e5966a97f8d29387f6f81699 (diff) | |
download | FreeBSD-src-0147dda7de9580d13778ecb4c9e92b83b7a63911.zip FreeBSD-src-0147dda7de9580d13778ecb4c9e92b83b7a63911.tar.gz |
Update LLDB snapshot to upstream r216948 (git 50f7fe44)
This is approximately "LLDB 3.5" although with a little bit of skew,
and will go along with the Clang 3.5 import.
Sponsored by: DARPA, AFRL
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Utility/StringLexer.cpp')
-rw-r--r-- | contrib/llvm/tools/lldb/source/Utility/StringLexer.cpp | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/contrib/llvm/tools/lldb/source/Utility/StringLexer.cpp b/contrib/llvm/tools/lldb/source/Utility/StringLexer.cpp new file mode 100644 index 0000000..bde2fc6 --- /dev/null +++ b/contrib/llvm/tools/lldb/source/Utility/StringLexer.cpp @@ -0,0 +1,101 @@ +//===--------------------- StringLexer.cpp -----------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "lldb/Utility/StringLexer.h" + +#include <algorithm> + +using namespace lldb_utility; + +StringLexer::StringLexer (std::string s) : +m_data(s), +m_position(0), +m_putback_data() +{ } + +StringLexer::StringLexer (const StringLexer& rhs) : +m_data(rhs.m_data), +m_position(rhs.m_position), +m_putback_data(rhs.m_putback_data) +{ } + +StringLexer::Character +StringLexer::Peek () +{ + if (m_putback_data.empty()) + return m_data[m_position]; + else + return m_putback_data.front(); +} + +bool +StringLexer::NextIf (Character c) +{ + auto val = Peek(); + if (val == c) + { + Next(); + return true; + } + return false; +} + +StringLexer::Character +StringLexer::Next () +{ + auto val = Peek(); + Consume(); + return val; +} + +bool +StringLexer::HasAtLeast (Size s) +{ + auto in_m_data = m_data.size()-m_position; + auto in_putback = m_putback_data.size(); + return (in_m_data + in_putback >= s); +} + + +void +StringLexer::PutBack (Character c) +{ + m_putback_data.push_back(c); +} + +bool +StringLexer::HasAny (Character c) +{ + const auto begin(m_putback_data.begin()); + const auto end(m_putback_data.end()); + if (std::find(begin, end, c) != end) + return true; + return m_data.find(c, m_position) != std::string::npos; +} + +void +StringLexer::Consume() +{ + if (m_putback_data.empty()) + m_position++; + else + m_putback_data.pop_front(); +} + +StringLexer& +StringLexer::operator = (const StringLexer& rhs) +{ + if (this != &rhs) + { + m_data = rhs.m_data; + m_position = rhs.m_position; + m_putback_data = rhs.m_putback_data; + } + return *this; +} |