X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Futil.h;h=f638dfed52dcabe2ac80c2efe315b7258e108467;hp=63d724c996008712a0e53931d15a4175ad7d721b;hb=52209badc8e769e50aa3019b63689dda0e79e9d0;hpb=39328183a6a87c6eb10a9dbbffcd5d65bf154a1f diff --git a/src/common/util.h b/src/common/util.h index 63d724c9..f638dfed 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2018 by the Quassel Project * + * Copyright (C) 2005-2019 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -23,19 +23,20 @@ #include "common-export.h" #include +#include #include #include -COMMON_EXPORT QString nickFromMask(const QString &mask); -COMMON_EXPORT QString userFromMask(const QString &mask); -COMMON_EXPORT QString hostFromMask(const QString &mask); -COMMON_EXPORT bool isChannelName(const QString &str); +COMMON_EXPORT QString nickFromMask(const QString& mask); +COMMON_EXPORT QString userFromMask(const QString& mask); +COMMON_EXPORT QString hostFromMask(const QString& mask); +COMMON_EXPORT bool isChannelName(const QString& str); //! Strip mIRC format codes COMMON_EXPORT QString stripFormatCodes(QString); //! Remove accelerator markers (&) from the string -COMMON_EXPORT QString stripAcceleratorMarkers(const QString &); +COMMON_EXPORT QString stripAcceleratorMarkers(const QString&); COMMON_EXPORT QString secondsToString(int timeInSeconds); @@ -46,23 +47,32 @@ COMMON_EXPORT QString secondsToString(int timeInSeconds); * \param codec The text codec we use if the input is not utf8 * \return The decoded string. */ -COMMON_EXPORT QString decodeString(const QByteArray &input, QTextCodec *codec = nullptr); +COMMON_EXPORT QString decodeString(const QByteArray& input, QTextCodec* codec = nullptr); -COMMON_EXPORT uint editingDistance(const QString &s1, const QString &s2); +COMMON_EXPORT uint editingDistance(const QString& s1, const QString& s2); template -QVariantList toVariantList(const QList &list) +QSet toQSet(const QList& list) +{ +#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) + return list.toSet(); +#else + return {list.begin(), list.end()}; +#endif +} + +template +QVariantList toVariantList(const QList& list) { QVariantList variants; for (int i = 0; i < list.count(); i++) { - variants << QVariant::fromValue(list[i]); + variants << QVariant::fromValue(list[i]); } return variants; } - template -QList fromVariantList(const QVariantList &variants) +QList fromVariantList(const QVariantList& variants) { QList list; for (int i = 0; i < variants.count(); i++) { @@ -71,8 +81,7 @@ QList fromVariantList(const QVariantList &variants) return list; } - -COMMON_EXPORT QByteArray prettyDigest(const QByteArray &digest); +COMMON_EXPORT QByteArray prettyDigest(const QByteArray& digest); /** * Format a string with %%%% to current date/timestamp via QDateTime. @@ -80,7 +89,7 @@ COMMON_EXPORT QByteArray prettyDigest(const QByteArray &digest); * @param[in] formatStr String with format codes * @return String with current date/time substituted in via formatting codes */ -COMMON_EXPORT QString formatCurrentDateTimeInString(const QString &formatStr); +COMMON_EXPORT QString formatCurrentDateTimeInString(const QString& formatStr); /** * Try to localize a given date/time in seconds from Unix epoch, pass through string if invalid @@ -93,15 +102,41 @@ COMMON_EXPORT QString formatCurrentDateTimeInString(const QString &formatStr); * @param useUTC If true, use UTC timezone, otherwise use local time * @return Localized date/time if parse succeeded, otherwise the source string */ -COMMON_EXPORT QString tryFormatUnixEpoch(const QString &possibleEpochDate, +COMMON_EXPORT QString tryFormatUnixEpoch(const QString& possibleEpochDate, Qt::DateFormat dateFormat = Qt::DateFormat::TextDate, bool useUTC = false); - /** * Format the given date/time in ISO 8601 format with timezone offset * * @param dateTime Date/time of interest * @return Date/time in ISO 8601 format with timezone offset */ -COMMON_EXPORT QString formatDateTimeToOffsetISO(const QDateTime &dateTime); +COMMON_EXPORT QString formatDateTimeToOffsetISO(const QDateTime& dateTime); + +namespace detail { + +template +struct SelectOverloadHelper +{ + template + constexpr auto operator()(R (C::*func)(Args...)) const noexcept -> decltype(func) + { + return func; + } +}; + +} // namespace detail + +/** + * Helper for resolving ambiguous overloads when using the member function-based connect syntax. + * + * Example usage: + * @code + * connect(this, selectOverload(&MyClass::mySignal), other, &Other::mySlot); + * @endcode + * + * @tparam Args Argument types of the desired signature + */ +template +constexpr Q_DECL_UNUSED detail::SelectOverloadHelper selectOverload = {};