Tweak implementation of subsequence_match_smart_case

Remove use of utf8 iterators and use directly utf8 functions
This commit is contained in:
Maxime Coste 2016-03-24 23:45:56 +00:00
parent e5afacba70
commit 87704227ad

View File

@ -49,20 +49,21 @@ static bool smartcase_eq(Codepoint query, Codepoint candidate)
static bool subsequence_match_smart_case(StringView str, StringView subseq, int& index_sum) static bool subsequence_match_smart_case(StringView str, StringView subseq, int& index_sum)
{ {
index_sum = 0; index_sum = 0;
Utf8It it{str.begin(), str}; auto it = str.begin();
int index = 0; int index = 0;
for (Utf8It subseq_it{subseq.begin(), subseq}; subseq_it != subseq.end(); ++subseq_it) for (auto subseq_it = subseq.begin(); subseq_it != subseq.end();
subseq_it = utf8::next(subseq_it, subseq.end()))
{ {
if (it == str.end()) if (it == str.end())
return false; return false;
while (not smartcase_eq(*subseq_it, *it)) const Codepoint c = utf8::codepoint(subseq_it, subseq.end());
while (not smartcase_eq(c, utf8::read_codepoint(it, subseq.end())))
{ {
++index; ++index;
if (++it == str.end()) if (it == str.end())
return false; return false;
} }
index_sum += index++; index_sum += index++;
++it;
} }
return true; return true;
} }