| LEFT | RIGHT | 
|   1 #ifndef ADBLOCK_PLUS_STRING_SCANNER_H |   1 #pragma once | 
|   2 #define ADBLOCK_PLUS_STRING_SCANNER_H |  | 
|   3  |   2  | 
|   4 #include "String.h" |   3 #include "String.h" | 
|   5  |   4  | 
|   6 class StringScanner |   5 class StringScanner | 
|   7 { |   6 { | 
|   8 private: |   7 private: | 
|   9   String mStr; |   8   const DependentString mStr; | 
|  10   String::size_type mPos; |   9   String::size_type mPos; | 
|  11   String::size_type mEnd; |  10   String::size_type mEnd; | 
|  12   String::value_type mTerminator; |  11   String::value_type mTerminator; | 
|  13 public: |  12 public: | 
|  14   StringScanner(const String& str, String::value_type terminator = u'\0') |  13   explicit StringScanner(const String& str, String::size_type pos = 0, | 
|  15       : mStr(str), mPos(0), mEnd(str.length()), mTerminator(terminator) {} |  14         String::value_type terminator = u'\0') | 
 |  15       : mStr(str), mPos(pos), mEnd(str.length()), mTerminator(terminator) {} | 
|  16  |  16  | 
|  17   bool done() |  17   bool done() const | 
|  18   { |  18   { | 
|  19     return mPos >= mEnd; |  19     return mPos >= mEnd; | 
|  20   } |  20   } | 
|  21  |  21  | 
|  22   String::size_type position() |  22   String::size_type position() const | 
|  23   { |  23   { | 
|  24     return mPos - 1; |  24     return mPos - 1; | 
|  25   } |  25   } | 
|  26  |  26  | 
|  27   String::value_type next() |  27   String::value_type next() | 
|  28   { |  28   { | 
|  29     String::value_type result = done() ? mTerminator : mStr[mPos]; |  29     String::value_type result = done() ? mTerminator : mStr[mPos]; | 
|  30     mPos++; |  30     mPos++; | 
|  31     return result; |  31     return result; | 
|  32   } |  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     bool skipped = false; | 
 |  48     while ((skipped = skipOne(ch))); | 
 |  49     return skipped; | 
 |  50   } | 
|  33 }; |  51 }; | 
|  34  |  | 
|  35 #endif |  | 
| LEFT | RIGHT |