brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · bda6e25 Raw
86 lines · cpp
1//===-- StringLexer.cpp ---------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "lldb/Utility/StringLexer.h"10 11#include <algorithm>12#include <cassert>13#include <utility>14 15using namespace lldb_private;16 17StringLexer::StringLexer(std::string s) : m_data(std::move(s)), m_position(0) {}18 19StringLexer::Character StringLexer::Peek() { return m_data[m_position]; }20 21bool StringLexer::NextIf(Character c) {22  auto val = Peek();23  if (val == c) {24    Next();25    return true;26  }27  return false;28}29 30std::pair<bool, StringLexer::Character>31StringLexer::NextIf(std::initializer_list<Character> cs) {32  auto val = Peek();33  for (auto c : cs) {34    if (val == c) {35      Next();36      return {true, c};37    }38  }39  return {false, 0};40}41 42bool StringLexer::AdvanceIf(const std::string &token) {43  auto pos = m_position;44  bool matches = true;45  for (auto c : token) {46    if (!NextIf(c)) {47      matches = false;48      break;49    }50  }51  if (!matches) {52    m_position = pos;53    return false;54  }55  return true;56}57 58StringLexer::Character StringLexer::Next() {59  auto val = Peek();60  Consume();61  return val;62}63 64bool StringLexer::HasAtLeast(Size s) {65  return (m_data.size() - m_position) >= s;66}67 68void StringLexer::PutBack(Size s) {69  assert(m_position >= s);70  m_position -= s;71}72 73std::string StringLexer::GetUnlexed() {74  return std::string(m_data, m_position);75}76 77void StringLexer::Consume() { m_position++; }78 79StringLexer &StringLexer::operator=(const StringLexer &rhs) {80  if (this != &rhs) {81    m_data = rhs.m_data;82    m_position = rhs.m_position;83  }84  return *this;85}86