25 UErrorCode status = U_ZERO_ERROR;
26 QByteArray name = QLocalePrivate::get(locale)->bcp47Name(
'_');
27 collator = ucol_open(name.constData(), &status);
28 if (U_FAILURE(status)) {
29 qWarning(
"Could not create collator: %d", status);
36 ucol_setAttribute(
collator, UCOL_NORMALIZATION_MODE, UCOL_ON, &status);
45 UColAttributeValue val = (caseSensitivity == Qt::CaseSensitive)
46 ? UCOL_DEFAULT_STRENGTH : UCOL_SECONDARY;
48 status = U_ZERO_ERROR;
49 ucol_setAttribute(
collator, UCOL_STRENGTH, val, &status);
50 if (U_FAILURE(status))
51 qWarning(
"ucol_setAttribute: Case First failed: %d", status);
53 status = U_ZERO_ERROR;
54 ucol_setAttribute(
collator, UCOL_NUMERIC_COLLATION,
numericMode ? UCOL_ON : UCOL_OFF, &status);
55 if (U_FAILURE(status))
56 qWarning(
"ucol_setAttribute: numeric collation failed: %d", status);
58 status = U_ZERO_ERROR;
59 ucol_setAttribute(
collator, UCOL_ALTERNATE_HANDLING,
61 if (U_FAILURE(status))
62 qWarning(
"ucol_setAttribute: Alternate handling failed: %d", status);
74int QCollator::compare(QStringView s1, QStringView s2)
const
77 return s2.size() ? -1 : 0;
81 d->ensureInitialized();
85 return ucol_strcoll(d->collator,
86 reinterpret_cast<
const UChar *>(s1.data()), s1.size(),
87 reinterpret_cast<
const UChar *>(s2.data()), s2.size());
90 return QtPrivate::compareStrings(s1, s2, d->caseSensitivity);
93QCollatorSortKey QCollator::sortKey(
const QString &string)
const
95 d->ensureInitialized();
98 return QCollatorSortKey(
new QCollatorSortKeyPrivate(string.toUtf8()));
101 QByteArray result(16 + string.size() + (string.size() >> 2), Qt::Uninitialized);
103 int size = ucol_getSortKey(d->collator, (
const UChar *)string.constData(),
104 string.size(), (uint8_t *)result.data(), result.size());
105 if (size > result.size()) {
107 size = ucol_getSortKey(d->collator, (
const UChar *)string.constData(),
108 string.size(), (uint8_t *)result.data(), result.size());
110 result.truncate(size);
111 return QCollatorSortKey(
new QCollatorSortKeyPrivate(std::move(result)));
114 return QCollatorSortKey(
new QCollatorSortKeyPrivate(QByteArray()));