Left: | ||
Right: |
OLD | NEW |
---|---|
(Empty) | |
1 #pragma once | |
2 | |
3 #include "String.h" | |
4 | |
5 class StringScanner | |
6 { | |
7 private: | |
8 const DependentString mStr; | |
9 String::size_type mPos; | |
10 String::size_type mEnd; | |
11 String::value_type mTerminator; | |
12 public: | |
13 StringScanner(const String& str, String::size_type pos = 0, | |
14 String::value_type terminator = u'\0') | |
15 : mStr(str), mPos(pos), mEnd(str.length()), mTerminator(terminator) {} | |
16 | |
17 bool done() | |
18 { | |
19 return mPos >= mEnd; | |
20 } | |
21 | |
22 String::size_type position() | |
23 { | |
24 return mPos - 1; | |
25 } | |
26 | |
27 String::value_type next() | |
28 { | |
29 String::value_type result = done() ? mTerminator : mStr[mPos]; | |
30 mPos++; | |
31 return result; | |
32 } | |
33 | |
34 bool skipOne(String::value_type ch) | |
35 { | |
36 if (!done() && mStr[mPos] == ch) | |
37 { | |
38 mPos++; | |
39 return true; | |
40 } | |
41 | |
42 return false; | |
43 } | |
44 | |
45 bool skip(String::value_type ch) | |
46 { | |
47 String::size_type oldPos = mPos; | |
sergei
2016/06/16 21:16:10
What about reusing of skipOne?
bool skipped = fal
Wladimir Palant
2016/12/06 10:47:01
Done.
| |
48 while (!done() && mStr[mPos] == ch) | |
49 mPos++; | |
50 return oldPos != mPos; | |
51 } | |
52 }; | |
OLD | NEW |