19 if (locale != QLocale::system().collation()) {
20 qWarning(
"Only the C and system collation locales are supported "
21 "with the POSIX collation implementation");
23 if (caseSensitivity != Qt::CaseSensitive)
24 qWarning(
"Case insensitive sorting unsupported in the posix collation implementation");
27 qWarning(
"Numeric mode unsupported in the posix collation implementation");
29 qWarning(
"Ignoring punctuation unsupported in the posix collation implementation");
39 ret.resize(string.length());
40 qsizetype len = string.toWCharArray(ret.data());
45int QCollator::compare(QStringView s1, QStringView s2)
const
48 return s2.size() ? -1 : 0;
53 return s1.compare(s2, caseSensitivity());
55 d->ensureInitialized();
57 QVarLengthArray<
wchar_t> array1, array2;
58 stringToWCharArray(array1, s1);
59 stringToWCharArray(array2, s2);
60 return std::wcscoll(array1.constData(), array2.constData());
63QCollatorSortKey QCollator::sortKey(
const QString &string)
const
65 d->ensureInitialized();
67 QVarLengthArray<
wchar_t> original;
68 stringToWCharArray(original, string);
69 QList<
wchar_t> result(original.size());
71 std::copy(original.cbegin(), original.cend(), result.begin());
73 auto availableSizeIncludingNullTerminator = result.size();
74 size_t neededSizeExcludingNullTerminator = std::wcsxfrm(
75 result.data(), original.constData(), availableSizeIncludingNullTerminator);
76 if (neededSizeExcludingNullTerminator > size_t(availableSizeIncludingNullTerminator - 1)) {
77 result.resize(neededSizeExcludingNullTerminator + 1);
78 availableSizeIncludingNullTerminator = result.size();
79 neededSizeExcludingNullTerminator = std::wcsxfrm(result.data(), original.constData(),
80 availableSizeIncludingNullTerminator);
81 Q_ASSERT(neededSizeExcludingNullTerminator
82 == size_t(availableSizeIncludingNullTerminator - 1));
84 result.resize(neededSizeExcludingNullTerminator + 1);
85 result[neededSizeExcludingNullTerminator] = 0;
87 return QCollatorSortKey(
new QCollatorSortKeyPrivate(std::move(result)));
90int QCollatorSortKey::compare(
const QCollatorSortKey &otherKey)
const
92 return std::wcscmp(d->m_key.constData(), otherKey.d->m_key.constData());
static void stringToWCharArray(QVarLengthArray< wchar_t > &ret, QStringView string)