diff options
author | Konstantin Ritt <ritt.ks@gmail.com> | 2019-06-11 14:03:59 +0300 |
---|---|---|
committer | Konstantin Ritt <ritt.ks@gmail.com> | 2019-08-28 15:11:43 +0300 |
commit | 954534fb5542dda1ab1a1730f7ef57c250d9f10c (patch) | |
tree | 9798531b830a726be43e54c19e4505cf654d9888 | |
parent | dcf3bbb9802f9adf79ae08d5d697b3ded3f0cb97 (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.cpp | 44 |
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) |