26 UErrorCode status = U_ZERO_ERROR;
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;
83 d =
new QCollatorPrivate(QLocale().collation());
85 d->ensureInitialized();
89 return ucol_strcoll(d->collator,
90 reinterpret_cast<
const UChar *>(s1.data()), s1.size(),
91 reinterpret_cast<
const UChar *>(s2.data()), s2.size());
94 return QtPrivate::compareStrings(s1, s2, d->caseSensitivity);
97QCollatorSortKey QCollator::sortKey(
const QString &string)
const
100 d =
new QCollatorPrivate(QLocale().collation());
102 d->ensureInitialized();
105 return QCollatorSortKey(
new QCollatorSortKeyPrivate(string.toUtf8()));
108 QByteArray result(16 + string.size() + (string.size() >> 2), Qt::Uninitialized);
110 int size = ucol_getSortKey(d->collator, (
const UChar *)string.constData(),
111 string.size(), (uint8_t *)result.data(), result.size());
112 if (size > result.size()) {
114 size = ucol_getSortKey(d->collator, (
const UChar *)string.constData(),
115 string.size(), (uint8_t *)result.data(), result.size());
117 result.truncate(size);
118 return QCollatorSortKey(
new QCollatorSortKeyPrivate(std::move(result)));
121 return QCollatorSortKey(
new QCollatorSortKeyPrivate(QByteArray()));