22static bool qt_u_strToCase(
const QString &str, QString *out,
const char *localeID,
27 int32_t size = str.size();
29 QString result(size, Qt::Uninitialized);
31 UErrorCode status = U_ZERO_ERROR;
33 const auto caseFunc = [conv] (
auto&&...args) {
35 using R [[maybe_unused]] =
decltype(u_strToUpper(
std::forward<
decltype(args)>(args)...));
38 return u_strToUpper(
std::forward<
decltype(args)>(args)...);
40 return u_strToLower(
std::forward<
decltype(args)>(args)...);
42 Q_UNREACHABLE_RETURN(R{0});
45 size = caseFunc(result.data_ptr().data(), result.size(),
46 str.data_ptr().data(), str.size(),
49 if (U_FAILURE(status) && status != U_BUFFER_OVERFLOW_ERROR)
52 if (size < result.size()) {
54 }
else if (size > result.size()) {
58 status = U_ZERO_ERROR;
59 size = caseFunc(result.data_ptr().data(), result.size(),
60 str.data_ptr().data(), str.size(),
63 if (U_FAILURE(status))
67 if (size != result.size())
71 *out =
std::move(result);