4class CLASS_DECL_ACME tokenizer :
10 using RANGE = ::ansi_range;
11 using const_iterator = RANGE::const_iterator;
14 const_iterator m_iterator;
17 tokenizer():m_iterator(
nullptr) {}
18 tokenizer(
const tokenizer &
range) : ansi_range(
range) {}
19 tokenizer(tokenizer &&
range) : ansi_range(::transfer(
range)) { }
20 tokenizer(const ::const_ansi_range &
range) :
26 tokenizer & operator = (
const tokenizer & tokenizer)
29 ::ansi_range::operator=(tokenizer);
36 tokenizer & operator = (tokenizer && tokenizer)
39 ::ansi_range::operator=(::transfer(tokenizer));
46 const_iterator find(const ::scoped_string & scopedstrSeparator)
const
49 auto iterator = (*this)(m_iterator).find(scopedstrSeparator, ::comparison::comparison < ::ansi_character >());
56 ::string & substring(::string & str, character_count count)
59 str.assign(m_iterator, count);
66 ::string & substring(::string & str, const_iterator
iterator)
76 ::string & substring(::string & str)
79 str.assign(m_iterator, m_end - m_iterator);
86 template < prototype_range RANGE >
87 RANGE & substring(RANGE &
range, character_count count)
90 range.begin() = m_iterator;
99 template < prototype_range RANGE >
103 range.begin() = m_iterator;
112 template < prototype_range RANGE >
113 RANGE & substring(RANGE &
range)
116 range.begin() = m_iterator;
118 range.end() = this->end();
125 bool ReadLine(::string & str,
bool bWithSeparator =
false);
126 bool _01Read(::i32 & i);
127 bool _01Read(::u32 &
user);
128 bool _01ReadHex(::i32 & i);
129 bool _01ReadHex(::u32 &
user);
131 bool _01Read(::string & str);
132 bool ExtractFolderPath(const ::scoped_string & scopedstrFilePath);
134 void reset() { m_iterator = this->begin(); }
136 void reset(const ::const_ansi_range &
range) { RANGE::operator = (
range); reset(); }
138 bool get_next_token(::string & strToken, const ::scoped_string & scopedstrSeparator,
bool bWithSeparator =
false);
140 bool get_next_smallest_token(::string & strToken, const ::string_array_base & straSeparator,
bool bWithSeparator =
false);
142 bool get_next_token_ex(::string & strToken, const ::scoped_string & scopedstrSeparator,
bool bWithSeparator =
false,
bool bSkipAdjacent =
false);
144 bool _001GetNextToken(::string & strToken);
146 bool get_next_word(::string * pstrToken =
nullptr);
148 character_count read(
void* p, character_count s)
151 auto iRead = minimum(s, this->m_end - m_iterator);
153 ::memory_copy(p, m_iterator, iRead);
162 template < prototype_range RANGE >
163 bool get_line(RANGE & rangeLine)
166 if (::is_end(m_iterator, this->end()))
173 const_iterator iteratorR = find(
"\r");
175 const_iterator iteratorN = find(
"\n");
177 if (::is_ok(iteratorR, this->end()))
180 if (::is_ok(iteratorN, this->end()))
183 if (iteratorR < iteratorN)
186 if (iteratorR + 1 == iteratorN)
189 substring(rangeLine, iteratorR);
191 m_iterator = iteratorN + 1;
197 substring(rangeLine, iteratorR);
199 m_iterator = iteratorR + 1;
209 substring(rangeLine, iteratorN);
211 m_iterator = iteratorN + 1;
219 substring(rangeLine, iteratorR);
221 m_iterator = iteratorR + 1;
226 else if (::is_ok(iteratorN, this->end()))
229 substring(rangeLine, iteratorN);
231 m_iterator = iteratorN + 1;
237 substring(rangeLine);
247 ::collection::count skip_word(::collection::count c);
251 bool get_word(::string & str);