StringLexer.h revision 360784
1//===-- StringLexer.h -------------------------------------------*- C++ -*-===//
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-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef utility_StringLexer_h_
10#define utility_StringLexer_h_
11
12#include <initializer_list>
13#include <string>
14#include <utility>
15
16namespace lldb_private {
17
18class StringLexer {
19public:
20  typedef std::string::size_type Position;
21  typedef std::string::size_type Size;
22
23  typedef std::string::value_type Character;
24
25  StringLexer(std::string s);
26
27  // These APIs are not bounds-checked.  Use HasAtLeast() if you're not sure.
28  Character Peek();
29
30  bool NextIf(Character c);
31
32  std::pair<bool, Character> NextIf(std::initializer_list<Character> cs);
33
34  bool AdvanceIf(const std::string &token);
35
36  Character Next();
37
38  bool HasAtLeast(Size s);
39
40  std::string GetUnlexed();
41
42  // This will assert if there are less than s characters preceding the cursor.
43  void PutBack(Size s);
44
45  StringLexer &operator=(const StringLexer &rhs);
46
47private:
48  std::string m_data;
49  Position m_position;
50
51  void Consume();
52};
53
54} // namespace lldb_private
55
56#endif // #ifndef utility_StringLexer_h_
57