18 if (locale != QLocale::system().collation()) {
19 qWarning(
"Only the C and system collation locales are supported "
20 "with the POSIX collation implementation");
22 if (caseSensitivity != Qt::CaseSensitive)
23 qWarning(
"Case insensitive sorting unsupported in the posix collation implementation");
26 qWarning(
"Numeric mode unsupported in the posix collation implementation");
28 qWarning(
"Ignoring punctuation unsupported in the posix collation implementation");
38 ret.resize(string.length());
39 qsizetype len = string.toWCharArray(ret.data());
44int QCollator::compare(QStringView s1, QStringView s2)
const
47 return s2.size() ? -1 : 0;
52 return s1.compare(s2, caseSensitivity());
54 d->ensureInitialized();
56 QVarLengthArray<
wchar_t> array1, array2;
57 stringToWCharArray(array1, s1);
58 stringToWCharArray(array2, s2);
59 return std::wcscoll(array1.constData(), array2.constData());
62QCollatorSortKey QCollator::sortKey(
const QString &string)
const
64 d->ensureInitialized();
66 QVarLengthArray<
wchar_t> original;
67 stringToWCharArray(original, string);
68 QList<
wchar_t> result(original.size());
70 std::copy(original.cbegin(), original.cend(), result.begin());
72 auto availableSizeIncludingNullTerminator = result.size();
73 size_t neededSizeExcludingNullTerminator = std::wcsxfrm(
74 result.data(), original.constData(), availableSizeIncludingNullTerminator);
75 if (neededSizeExcludingNullTerminator > size_t(availableSizeIncludingNullTerminator - 1)) {
76 result.resize(neededSizeExcludingNullTerminator + 1);
77 availableSizeIncludingNullTerminator = result.size();
78 neededSizeExcludingNullTerminator = std::wcsxfrm(result.data(), original.constData(),
79 availableSizeIncludingNullTerminator);
80 Q_ASSERT(neededSizeExcludingNullTerminator
81 == size_t(availableSizeIncludingNullTerminator - 1));
83 result.resize(neededSizeExcludingNullTerminator + 1);
84 result[neededSizeExcludingNullTerminator] = 0;
86 return QCollatorSortKey(
new QCollatorSortKeyPrivate(std::move(result)));
89int QCollatorSortKey::compare(
const QCollatorSortKey &otherKey)
const
91 return std::wcscmp(d->m_key.constData(), otherKey.d->m_key.constData());
static void stringToWCharArray(QVarLengthArray< wchar_t > &ret, QStringView string)