<!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>