]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Utility/StringLexer.h
Merge lldb trunk r366426, resolve conflicts, and update FREEBSD-Xlist.
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / include / lldb / Utility / StringLexer.h
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
16 namespace lldb_utility {
17
18 class StringLexer {
19 public:
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
47 private:
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_