| OLD | NEW | 
| (Empty) |  | 
 |   1 #pragma once | 
 |   2  | 
 |   3 #include "String.h" | 
 |   4  | 
 |   5 class StringScanner | 
 |   6 { | 
 |   7 private: | 
 |   8   const String 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 |