14inline bool naturalLess(
const QString& a,
const QString& b)
noexcept
16 const auto digit = [](QChar c)
noexcept {
return c >= u
'0' && c <= u
'9'; };
17 qsizetype i = 0, j = 0;
18 while(i < a.size() && j < b.size())
20 if(digit(a[i]) && digit(b[j]))
22 qsizetype i2 = i, j2 = j;
23 while(i2 < a.size() && a[i2] ==
'0')
25 while(j2 < b.size() && b[j2] ==
'0')
27 qsizetype ie = i2, je = j2;
28 while(ie < a.size() && digit(a[ie]))
30 while(je < b.size() && digit(b[je]))
33 if(ie - i2 != je - j2)
34 return ie - i2 < je - j2;
35 for(qsizetype k = 0; k < ie - i2; k++)
36 if(a[i2 + k] != b[j2 + k])
37 return a[i2 + k] < b[j2 + k];
42 const auto ca = a[i].toCaseFolded(), cb = b[j].toCaseFolded();
48 if((a.size() - i) != (b.size() - j))
49 return (a.size() - i) < (b.size() - j);