| 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; | 
|  | 48     while (!done() && mStr[mPos] == ch) | 
|  | 49       mPos++; | 
|  | 50     return oldPos != mPos; | 
|  | 51   } | 
|  | 52 }; | 
| OLD | NEW | 
|---|