aboutsummaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2019-05-05 13:31:55 +0200
committerLNJ <lnj@kaidan.im>2019-10-20 17:01:35 +0200
commitc17e68b620c8f721d771aed5f2096597bc2cb0d1 (patch)
treefa6251acf0f9f35de44f74198c4ec0b5625c4b5e /src/base
parentf8ace8e605b3e296fde3c48b68d6685315e99cbc (diff)
downloadqxmpp-c17e68b620c8f721d771aed5f2096597bc2cb0d1.tar.gz
QXmppStanza::Error: Use d-pointer to maintain binary compat in future
Diffstat (limited to 'src/base')
-rw-r--r--src/base/QXmppStanza.cpp82
-rw-r--r--src/base/QXmppStanza.h10
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());