diff options
| author | Linus Jahn <lnj@kaidan.im> | 2019-05-05 13:31:55 +0200 |
|---|---|---|
| committer | LNJ <lnj@kaidan.im> | 2019-10-20 17:01:35 +0200 |
| commit | c17e68b620c8f721d771aed5f2096597bc2cb0d1 (patch) | |
| tree | fa6251acf0f9f35de44f74198c4ec0b5625c4b5e /src | |
| parent | f8ace8e605b3e296fde3c48b68d6685315e99cbc (diff) | |
| download | qxmpp-c17e68b620c8f721d771aed5f2096597bc2cb0d1.tar.gz | |
QXmppStanza::Error: Use d-pointer to maintain binary compat in future
Diffstat (limited to 'src')
| -rw-r--r-- | src/base/QXmppStanza.cpp | 82 | ||||
| -rw-r--r-- | src/base/QXmppStanza.h | 10 |
2 files changed, 58 insertions, 34 deletions
diff --git a/src/base/QXmppStanza.cpp b/src/base/QXmppStanza.cpp index a9fba211..c6c4afc4 100644 --- a/src/base/QXmppStanza.cpp +++ b/src/base/QXmppStanza.cpp @@ -138,7 +138,7 @@ bool QXmppExtendedAddress::isValid() const return !d->type.isEmpty() && !d->jid.isEmpty(); } -/// \cond +/// \cond void QXmppExtendedAddress::parse(const QDomElement &element) { d->delivered = element.attribute("delivered") == "true"; @@ -158,76 +158,98 @@ void QXmppExtendedAddress::toXml(QXmlStreamWriter *xmlWriter) const xmlWriter->writeAttribute("type", d->type); xmlWriter->writeEndElement(); } -/// \endcond +/// \endcond + +class QXmppStanzaErrorPrivate : public QSharedData +{ +public: + QXmppStanzaErrorPrivate(); + + int code; + QXmppStanza::Error::Type type; + QXmppStanza::Error::Condition condition; + QString text; +}; + +QXmppStanzaErrorPrivate::QXmppStanzaErrorPrivate() + : code(0), + type(static_cast<QXmppStanza::Error::Type>(-1)), + condition(static_cast<QXmppStanza::Error::Condition>(-1)) +{ +} -QXmppStanza::Error::Error(): - m_code(0), - m_type(static_cast<QXmppStanza::Error::Type>(-1)), - m_condition(static_cast<QXmppStanza::Error::Condition>(-1)) +QXmppStanza::Error::Error() + : d(new QXmppStanzaErrorPrivate) { } -QXmppStanza::Error::Error(Type type, Condition cond, const QString& text): - m_code(0), - m_type(type), - m_condition(cond), - m_text(text) +QXmppStanza::Error::Error(const QXmppStanza::Error &) = default; + +QXmppStanza::Error::Error(Type type, Condition cond, const QString& text) + : d(new QXmppStanzaErrorPrivate) { + d->type = type; + d->condition = cond; + d->text = text; } QXmppStanza::Error::Error(const QString& type, const QString& cond, - const QString& text): - m_code(0), - m_text(text) + const QString& text) + : d(new QXmppStanzaErrorPrivate) { + d->text = text; setTypeFromStr(type); setConditionFromStr(cond); } +QXmppStanza::Error::~Error() = default; + +QXmppStanza::Error &QXmppStanza::Error::operator=(const QXmppStanza::Error &) = default; + QString QXmppStanza::Error::text() const { - return m_text; + return d->text; } void QXmppStanza::Error::setText(const QString& text) { - m_text = text; + d->text = text; } int QXmppStanza::Error::code() const { - return m_code; + return d->code; } void QXmppStanza::Error::setCode(int code) { - m_code = code; + d->code = code; } QXmppStanza::Error::Condition QXmppStanza::Error::condition() const { - return m_condition; + return d->condition; } void QXmppStanza::Error::setCondition(QXmppStanza::Error::Condition cond) { - m_condition = cond; + d->condition = cond; } QXmppStanza::Error::Type QXmppStanza::Error::type() const { - return m_type; + return d->type; } void QXmppStanza::Error::setType(QXmppStanza::Error::Type type) { - m_type = type; + d->type = type; } /// \cond QString QXmppStanza::Error::getTypeStr() const { - switch(m_type) + switch(d->type) { case Cancel: return "cancel"; @@ -240,13 +262,13 @@ QString QXmppStanza::Error::getTypeStr() const case Wait: return "wait"; default: - return ""; + return {}; } } QString QXmppStanza::Error::getConditionStr() const { - return strFromCondition(m_condition); + return strFromCondition(d->condition); } void QXmppStanza::Error::setTypeFromStr(const QString& type) @@ -304,8 +326,8 @@ void QXmppStanza::Error::toXml( QXmlStreamWriter *writer ) const writer->writeStartElement("error"); helperToXmlAddAttribute(writer, "type", type); - if (m_code > 0) - helperToXmlAddAttribute(writer, "code", QString::number(m_code)); + if (d->code > 0) + helperToXmlAddAttribute(writer, "code", QString::number(d->code)); if(!cond.isEmpty()) { @@ -313,18 +335,18 @@ void QXmppStanza::Error::toXml( QXmlStreamWriter *writer ) const writer->writeAttribute("xmlns", ns_stanza); writer->writeEndElement(); } - if(!m_text.isEmpty()) + if(!d->text.isEmpty()) { writer->writeStartElement("text"); writer->writeAttribute("xml:lang", "en"); writer->writeAttribute("xmlns", ns_stanza); - writer->writeCharacters(m_text); + writer->writeCharacters(d->text); writer->writeEndElement(); } writer->writeEndElement(); } -/// \endcond +/// \endcond class QXmppStanzaPrivate : public QSharedData { diff --git a/src/base/QXmppStanza.h b/src/base/QXmppStanza.h index 713435c1..eda8c04d 100644 --- a/src/base/QXmppStanza.h +++ b/src/base/QXmppStanza.h @@ -80,6 +80,7 @@ private: }; class QXmppStanzaPrivate; +class QXmppStanzaErrorPrivate; /// \defgroup Stanzas @@ -129,8 +130,12 @@ public: }; Error(); + Error(const Error &); Error(Type type, Condition cond, const QString& text = QString()); Error(const QString& type, const QString& cond, const QString& text = QString()); + ~Error(); + + Error &operator=(const Error &); int code() const; void setCode(int code); @@ -156,10 +161,7 @@ public: QString getTypeStr() const; void setTypeFromStr(const QString& type); - int m_code; - Type m_type; - Condition m_condition; - QString m_text; + QSharedDataPointer<QXmppStanzaErrorPrivate> d; }; QXmppStanza(const QString& from = QString(), const QString& to = QString()); |
