diff --git a/src/blackmisc/logpattern.h b/src/blackmisc/logpattern.h index f25b2b29a..8b2dd75a9 100644 --- a/src/blackmisc/logpattern.h +++ b/src/blackmisc/logpattern.h @@ -15,6 +15,7 @@ #include "blackmiscexport.h" #include "statusmessage.h" #include +#include namespace BlackMisc { @@ -85,6 +86,15 @@ namespace BlackMisc //! \copydoc CValueObject::marshallFromDbus() void unmarshallFromDbus(const QDBusArgument &argument); + //! \copydoc CValueObject::qHash + //! \todo Use Mixin::HashByTuple when Qt 5.5 is baseline (qHash(QSet) was added in Qt 5.5). + friend uint qHash(const CLogPattern &p, uint seed = 0) + { + seed = std::accumulate(p.m_severities.begin(), p.m_severities.end(), seed, [](uint i, CStatusMessage::StatusSeverity s) { return i + (1 << static_cast(s)); }); + seed ^= std::accumulate(p.m_strings.begin(), p.m_strings.end(), 0, [](uint i, const QString &s) { return i + qHash(s); }); + return qHash(static_cast(p.m_strategy), seed); + } + private: bool checkInvariants() const; @@ -116,9 +126,9 @@ namespace BlackMisc Q_DECLARE_METATYPE(BlackMisc::CLogPattern) BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::CLogPattern, ( - attr(o.m_severities, flags()), + attr(o.m_severities), attr(o.m_strategy), - attr(o.m_strings, flags()) + attr(o.m_strings) )) #endif