26 UErrorCode status = U_ZERO_ERROR;
27 QByteArray name = QLocalePrivate::get(locale)->bcp47Name(
'_');
28 collator = ucol_open(name.constData(), &status);
29 if (U_FAILURE(status)) {
30 qWarning(
"Could not create collator: %d", status);
37 ucol_setAttribute(
collator, UCOL_NORMALIZATION_MODE, UCOL_ON, &status);
46 UColAttributeValue val = (caseSensitivity == Qt::CaseSensitive)
47 ? UCOL_DEFAULT_STRENGTH : UCOL_SECONDARY;
49 status = U_ZERO_ERROR;
50 ucol_setAttribute(
collator, UCOL_STRENGTH, val, &status);
51 if (U_FAILURE(status))
52 qWarning(
"ucol_setAttribute: Case First failed: %d", status);
54 status = U_ZERO_ERROR;
55 ucol_setAttribute(
collator, UCOL_NUMERIC_COLLATION,
numericMode ? UCOL_ON : UCOL_OFF, &status);
56 if (U_FAILURE(status))
57 qWarning(
"ucol_setAttribute: numeric collation failed: %d", status);
59 status = U_ZERO_ERROR;
60 ucol_setAttribute(
collator, UCOL_ALTERNATE_HANDLING,
62 if (U_FAILURE(status))
63 qWarning(
"ucol_setAttribute: Alternate handling failed: %d", status);
75int QCollator::compare(QStringView s1, QStringView s2)
const
78 return s2.size() ? -1 : 0;
82 d->ensureInitialized();
86 return ucol_strcoll(d->collator,
87 reinterpret_cast<
const UChar *>(s1.data()), s1.size(),
88 reinterpret_cast<
const UChar *>(s2.data()), s2.size());
91 return QtPrivate::compareStrings(s1, s2, d->caseSensitivity);
94QCollatorSortKey QCollator::sortKey(
const QString &string)
const
96 d->ensureInitialized();
99 return QCollatorSortKey(
new QCollatorSortKeyPrivate(string.toUtf8()));
102 QByteArray result(16 + string.size() + (string.size() >> 2), Qt::Uninitialized);
104 int size = ucol_getSortKey(d->collator, (
const UChar *)string.constData(),
105 string.size(), (uint8_t *)result.data(), result.size());
106 if (size > result.size()) {
108 size = ucol_getSortKey(d->collator, (
const UChar *)string.constData(),
109 string.size(), (uint8_t *)result.data(), result.size());
111 result.truncate(size);
112 return QCollatorSortKey(
new QCollatorSortKeyPrivate(std::move(result)));
115 return QCollatorSortKey(
new QCollatorSortKeyPrivate(QByteArray()));