| 227 | } |
| 228 | |
| 229 | TWideToken Extract(size_t begin, size_t end) const { |
| 230 | TWideToken ret; |
| 231 | if (end > SubTokens.size()) |
| 232 | end = SubTokens.size(); |
| 233 | if (begin >= end) |
| 234 | return ret; |
| 235 | |
| 236 | const size_t shift = SubTokens[begin].Pos - SubTokens[begin].PrefixLen; |
| 237 | ret.Token = Token + shift; |
| 238 | for (size_t i = begin; i < end; ++i) { |
| 239 | ret.SubTokens.push_back(SubTokens[i]); |
| 240 | ret.SubTokens.back().Pos -= shift; |
| 241 | } |
| 242 | ret.SubTokens.back().Hyphen = HYPHEN_NONE; |
| 243 | ret.SubTokens.back().TokenDelim = TOKDELIM_NULL; |
| 244 | ret.Leng = ret.SubTokens.back().EndPos() + ret.SubTokens.back().SuffixLen; |
| 245 | Y_ASSERT(ret.Leng + shift <= Leng); |
| 246 | return ret; |
| 247 | } |
| 248 | }; |
| 249 | |
| 250 | inline bool operator==(const TWideToken& a, const TWideToken& b) { |