summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2019-06-11 14:03:59 +0300
committerKonstantin Ritt <ritt.ks@gmail.com>2019-08-28 15:11:43 +0300
commit954534fb5542dda1ab1a1730f7ef57c250d9f10c (patch)
tree9798531b830a726be43e54c19e4505cf654d9888
parentdcf3bbb9802f9adf79ae08d5d697b3ded3f0cb97 (diff)
Simplify readBufferTyped() routines
get rid of dubious code by generalizing template specializations Change-Id: Ib23f423f10e63985a11d18a9cfd37178ad18551e Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
-rw-r--r--src/mqtt/qmqttconnection.cpp44
1 files changed, 14 insertions, 30 deletions
diff --git a/src/mqtt/qmqttconnection.cpp b/src/mqtt/qmqttconnection.cpp
index af87609..1c0795b 100644
--- a/src/mqtt/qmqttconnection.cpp
+++ b/src/mqtt/qmqttconnection.cpp
@@ -47,49 +47,33 @@ QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(lcMqttConnection, "qt.mqtt.connection")
Q_LOGGING_CATEGORY(lcMqttConnectionVerbose, "qt.mqtt.connection.verbose");
-template<>
-quint32 QMqttConnection::readBufferTyped(qint64 *dataSize)
+template <typename T>
+T QMqttConnection::readBufferTyped(qint64 *dataSize)
{
- if (dataSize)
- *dataSize -= sizeof(quint32);
- return qFromBigEndian<quint32>(reinterpret_cast<const quint32 *>(readBuffer(4).constData()));
-}
+ Q_STATIC_ASSERT(std::is_integral<T>::value);
-template<>
-quint16 QMqttConnection::readBufferTyped(qint64 *dataSize)
-{
- if (dataSize)
- *dataSize -= sizeof(quint16);
- return qFromBigEndian<quint16>(reinterpret_cast<const quint16 *>(readBuffer(2).constData()));
+ T result;
+ readBuffer(reinterpret_cast<char *>(&result), sizeof(result));
+ if (dataSize != nullptr)
+ *dataSize -= sizeof(result);
+ return qFromBigEndian(result);
}
template<>
-quint8 QMqttConnection::readBufferTyped(qint64 *dataSize)
-{
- quint8 result;
- readBuffer(reinterpret_cast<char *>(&result), 1);
- if (dataSize)
- *dataSize -= sizeof(quint8);
- return result;
-}
-
-template<>
-QString QMqttConnection::readBufferTyped(qint64 *dataSize)
+QByteArray QMqttConnection::readBufferTyped(qint64 *dataSize)
{
const quint16 size = readBufferTyped<quint16>(dataSize);
+ QByteArray ba(int(size), Qt::Uninitialized);
+ readBuffer(ba.data(), size);
if (dataSize)
*dataSize -= size;
- const QByteArray ba = readBuffer(size);
- return QString::fromUtf8(reinterpret_cast<const char *>(ba.constData()), ba.size());
+ return ba;
}
template<>
-QByteArray QMqttConnection::readBufferTyped(qint64 *dataSize)
+QString QMqttConnection::readBufferTyped(qint64 *dataSize)
{
- const quint16 size = readBufferTyped<quint16>(dataSize);
- if (dataSize)
- *dataSize -= size;
- return readBuffer(size);
+ return QString::fromUtf8(readBufferTyped<QByteArray>(dataSize));
}
QMqttConnection::QMqttConnection(QObject *parent) : QObject(parent)