diff --git a/src/blackmisc/statusmessage.cpp b/src/blackmisc/statusmessage.cpp index 9fc405bb0..6233c18ac 100644 --- a/src/blackmisc/statusmessage.cpp +++ b/src/blackmisc/statusmessage.cpp @@ -113,17 +113,38 @@ namespace BlackMisc return *this; } + CStatusMessage::CStatusMessage(QStringView message) : ITimestampBased(QDateTime::currentMSecsSinceEpoch()) + { + m_message = CStrongStringView(message.trimmed()); + } + CStatusMessage::CStatusMessage(const QString &message) : ITimestampBased(QDateTime::currentMSecsSinceEpoch()) { m_message = message.trimmed(); } + CStatusMessage::CStatusMessage(StatusSeverity severity, QStringView message) + : CStatusMessage(message) + { + m_severity = severity; + } + CStatusMessage::CStatusMessage(StatusSeverity severity, const QString &message) : CStatusMessage(message) { m_severity = severity; } + CStatusMessage::CStatusMessage(const CLogCategoryList &categories, StatusSeverity severity, QStringView message, bool validation) + : CStatusMessage(severity, message) + { + m_categories = categories; + if (validation) + { + this->addValidationCategory(); + } + } + CStatusMessage::CStatusMessage(const CLogCategoryList &categories, StatusSeverity severity, const QString &message, bool validation) : CStatusMessage(severity, message) { diff --git a/src/blackmisc/statusmessage.h b/src/blackmisc/statusmessage.h index b40eaf7f0..a2e914bcd 100644 --- a/src/blackmisc/statusmessage.h +++ b/src/blackmisc/statusmessage.h @@ -67,6 +67,9 @@ namespace BlackMisc //! Construct from a QString. CStrongStringView(const QString &string) : m_string(string), m_view(m_string) {} + //! Construct from a QStringView. Explicit because it could be dangerous if used without care. + explicit CStrongStringView(QStringView view) : m_view(view) {} + //! Deleted constructor. CStrongStringView(const char *) = delete; @@ -340,13 +343,29 @@ namespace BlackMisc ~CStatusMessage() = default; //! Constructor + //! @{ + template + CStatusMessage(const char16_t (&message)[N]) : CStatusMessage(QStringView(message)) {} CStatusMessage(const QString &message); - - //! Constructor + template + CStatusMessage(StatusSeverity severity, const char16_t (&message)[N]) : CStatusMessage(severity, QStringView(message)) {} CStatusMessage(StatusSeverity severity, const QString &message); + //! @} //! Constructor, also a validation messsage can be directly created + //! @{ + template + CStatusMessage(const CLogCategoryList &categories, StatusSeverity severity, const char16_t (&message)[N], bool validation = false) : CStatusMessage(categories, severity, QStringView(message), validation) {} CStatusMessage(const CLogCategoryList &categories, StatusSeverity severity, const QString &message, bool validation = false); + //! @} + + //! Deleted constructor, to prevent inefficient construction from byte string literal. + //! Explicit so as to avoid ambiguities with functions overloaded on QString and CStatusMessage. + //! @{ + explicit CStatusMessage(const char *message) = delete; + explicit CStatusMessage(StatusSeverity severity, const char *message) = delete; + explicit CStatusMessage(const CLogCategoryList &categories, StatusSeverity severity, const char *message, bool validation = false) = delete; + //! @} //! Construct from a Qt logging triple //! \sa QtMessageHandler @@ -491,6 +510,10 @@ namespace BlackMisc static void registerMetadata(); private: + CStatusMessage(QStringView message); + CStatusMessage(StatusSeverity severity, QStringView message); + CStatusMessage(const CLogCategoryList &categories, StatusSeverity severity, QStringView message, bool validation); + mutable QVector m_handledByObjects; mutable QReadWriteLock m_lock; //!< lock (because of mutable members)