<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p><span style="white-space: pre-wrap">
</span></p>
<blockquote type="cite" cite="mid:100nlpu$218$1@ciao.gmane.io">
<blockquote type="cite">
<pre wrap="" class="moz-quote-pre">Hi.
I'd like to ask you, guys, maybe I'm a dumb a little, and you know how
to optimize a following function.
</pre>
</blockquote>
<pre wrap="" class="moz-quote-pre">
I don't understand the requirements.
Can you provide 10 sets of input/output ?</pre>
</blockquote>
<p><br>
</p>
<p>1) U+0009 U+0020 U+2008 abbc</p>
<p> skipIf(0, line, [](const QChar &ch){ return
ch.isSpace(); }); // Should return 3.</p>
<p> skipIf(3, line, [](const QChar &ch){ return
ch.isSpace(); }); // Should return 3.</p>
<p><span style="white-space: pre-wrap">2) ab1234567890abcd
</span></p>
<p><span style="white-space: pre-wrap"> skipIf(2, line, [](const QChar &ch){ return ch.isDigit(); }); // Should return 12.</span></p>
<p><span style="white-space: pre-wrap"> skipIf(0, line, [](const QChar &ch){ return ch.isDigit(); }); // Should return 0.</span></p>
<p><span style="white-space: pre-wrap"> skipIf(12, line, [](const QChar &ch){ return ch.isDigit(); }); // Should return 12.</span></p>
<p><span style="white-space: pre-wrap">3) U+0020 U+0020 ~~~</span></p>
<p><span style="white-space: pre-wrap"> const auto skipCh = QLatin1Char('~');</span></p>
<p><span style="white-space: pre-wrap"> skipIf(0, line, [&skipCh](const QChar &ch){ return (ch == skipCh); }) ; // Should return 0.</span></p>
<p><span style="white-space: pre-wrap"> skipIf(2, line, [&skipCh](const QChar &ch){ return (ch == skipCh); }) ; // Should return 5.</span></p>
<p><span style="white-space: pre-wrap">4) gmail</span></p>
<p><span style="white-space: pre-wrap"> auto isAllowed = [](const QChar &ch) -> bool {
const auto unicode = ch.unicode();
return ((unicode >= 48 && unicode <= 57) || (unicode >= 97 && unicode <= 122) ||
(unicode >= 65 && unicode <= 90));
};
auto isAdditional = [](const QChar &ch) -> bool {
const auto unicode = ch.unicode();
return (unicode == 33 || (unicode >= 35 && unicode <= 39) ||
unicode == 42 || unicode == 43 || (unicode >= 45 && unicode <= 47) ||
unicode == 61 || unicode == 63 || (unicode >= 94 && unicode <= 96) ||
(unicode >= 123 && unicode <= 126));
};</span></p>
<p><span style="white-space: pre-wrap"> skipIf(0, line, [&isAllowed, &isAdditional](const QChar &ch){ return (isAllowed(ch) || isAdditional(ch)); }); // Should return 5.</span></p>
<p><span style="white-space: pre-wrap"> skipIf(1, line, [&isAllowed, &isAdditional](const QChar &ch){ return (isAllowed(ch) || isAdditional(ch)); }); // Should return 5.</span></p>
<p><span style="white-space: pre-wrap">5) {abc}</span></p>
<p><span style="white-space: pre-wrap"> const auto fch = QLatin1Char('}');</span></p>
<p><span style="white-space: pre-wrap"> skipIf(0, line, [&fch](const QChar &ch){ return (ch != fch); }) ; // Should return 4.</span></p>
<p></p>
</body>
</html>