// SPDX-FileCopyrightText: 2025 Contributors to Chatterino // // SPDX-License-Identifier: MIT #pragma once #include #include #include #include #if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) # include #endif namespace chatterino { template struct QCompareTransparentBase { using is_transparent = void; // clang-format off bool operator()(const QString & a, const QString & b) const noexcept; bool operator()(QStringView a, QStringView b) const noexcept; bool operator()(QLatin1String a, QLatin1String b) const noexcept; bool operator()(const QString & a, QStringView b) const noexcept; bool operator()(const QString & a, QLatin1String b) const noexcept; bool operator()(QStringView a, const QString & b) const noexcept; bool operator()(QLatin1String a, const QString & b) const noexcept; bool operator()(QStringView a, QLatin1String b) const noexcept; bool operator()(QLatin1String a, QStringView b) const noexcept; #if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) bool operator()(QUtf8StringView a, QUtf8StringView b) const noexcept; bool operator()(const QString & a, QUtf8StringView b) const noexcept; bool operator()(QStringView a, QUtf8StringView b) const noexcept; bool operator()(QLatin1String a, QUtf8StringView b) const noexcept; bool operator()(QUtf8StringView a, const QString & b) const noexcept; bool operator()(QUtf8StringView a, QStringView b) const noexcept; bool operator()(QUtf8StringView a, QLatin1String b) const noexcept; #endif // clang-format on }; /// Case insensitive transparent comparator for Qt's string types using QCompareCaseInsensitive = QCompareTransparentBase; /// Case sensitive transparent comparator for Qt's string types using QCompareTransparent = QCompareTransparentBase; template inline bool QCompareTransparentBase::operator()( const QString &a, const QString &b) const noexcept { return a.compare(b, CS) < 0; } template inline bool QCompareTransparentBase::operator()( QStringView a, QStringView b) const noexcept { return a.compare(b, CS) < 0; } template inline bool QCompareTransparentBase::operator()( QLatin1String a, QLatin1String b) const noexcept { return a.compare(b, CS) < 0; } template inline bool QCompareTransparentBase::operator()( const QString &a, QStringView b) const noexcept { return a.compare(b, CS) < 0; } template inline bool QCompareTransparentBase::operator()( const QString &a, QLatin1String b) const noexcept { return a.compare(b, CS) < 0; } template inline bool QCompareTransparentBase::operator()( QStringView a, const QString &b) const noexcept { return a.compare(b, CS) < 0; } template inline bool QCompareTransparentBase::operator()( QLatin1String a, const QString &b) const noexcept { return a.compare(b, CS) < 0; } template inline bool QCompareTransparentBase::operator()( QStringView a, QLatin1String b) const noexcept { return a.compare(b, CS) < 0; } template inline bool QCompareTransparentBase::operator()( QLatin1String a, QStringView b) const noexcept { return a.compare(b, CS) < 0; } #if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) template inline bool QCompareTransparentBase::operator()( QUtf8StringView a, QUtf8StringView b) const noexcept { return a.compare(b, CS) < 0; } template inline bool QCompareTransparentBase::operator()( const QString &a, QUtf8StringView b) const noexcept { return QStringView{a}.compare(b, CS) < 0; } template inline bool QCompareTransparentBase::operator()( QStringView a, QUtf8StringView b) const noexcept { return a.compare(b, CS) < 0; } template inline bool QCompareTransparentBase::operator()( QLatin1String a, QUtf8StringView b) const noexcept { return a.compare(b, CS) < 0; } template inline bool QCompareTransparentBase::operator()( QUtf8StringView a, const QString &b) const noexcept { return a.compare(b, CS) < 0; } template inline bool QCompareTransparentBase::operator()( QUtf8StringView a, QStringView b) const noexcept { return a.compare(b, CS) < 0; } template inline bool QCompareTransparentBase::operator()( QUtf8StringView a, QLatin1String b) const noexcept { return a.compare(b, CS) < 0; } #endif } // namespace chatterino