mirror of
https://github.com/romixlab/qmsgpack.git
synced 2025-06-25 01:21:33 +02:00
Nil packing and unpacking fix
This commit is contained in:
@ -1,3 +1,8 @@
|
||||
set(Qt5Core_DIR "/opt/Qt5.6.0/5.6/gcc_64/lib/cmake/Qt5Core")
|
||||
set(Qt5Test_DIR "/opt/Qt5.6.0/5.6/gcc_64/lib/cmake/Qt5Test")
|
||||
set(Qt5_DIR "/opt/Qt5.6.0/5.6/gcc_64/lib/cmake/Qt5Core")
|
||||
set(QT_QMAKE_EXECUTABLE "/opt/Qt5.6.0/5.6/gcc_64/bin/qmake")
|
||||
|
||||
project(qmsgpack)
|
||||
|
||||
cmake_minimum_required(VERSION 2.8.8)
|
||||
|
BIN
doc/_themes/sphinx_rtd_theme
vendored
BIN
doc/_themes/sphinx_rtd_theme
vendored
Binary file not shown.
@ -62,6 +62,18 @@ Add options before ``..`` as follow:
|
||||
|
||||
cmake -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_TESTS=True ..
|
||||
|
||||
Custom Qt installation
|
||||
""""""""""""""""""""""
|
||||
|
||||
If you installed Qt with online installer, cmake will most likely not find it, in this case try adding following lines to CMakeLists.txt:
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
set(Qt5Core_DIR "/opt/Qt5.6.0/5.6/gcc_64/lib/cmake/Qt5Core")
|
||||
set(Qt5Test_DIR "/opt/Qt5.6.0/5.6/gcc_64/lib/cmake/Qt5Test")
|
||||
set(Qt5_DIR "/opt/Qt5.6.0/5.6/gcc_64/lib/cmake/Qt5Core")
|
||||
set(QT_QMAKE_EXECUTABLE "/opt/Qt5.6.0/5.6/gcc_64/bin/qmake")
|
||||
|
||||
qmake
|
||||
^^^^^
|
||||
|
||||
|
@ -4,10 +4,6 @@
|
||||
#include <QVariant>
|
||||
#include <QtGlobal>
|
||||
|
||||
#ifdef Q_OS_WINRT
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
#define MSGPACK_MAJOR 0
|
||||
#define MSGPACK_MINOR 1
|
||||
#define MSGPACK_VERSION 0
|
||||
|
@ -18,7 +18,9 @@ QReadWriteLock MsgPackPrivate::packers_lock;
|
||||
quint8 *MsgPackPrivate::pack(const QVariant &v, quint8 *p, bool wr, QVector<QByteArray> &user_data)
|
||||
{
|
||||
QMetaType::Type t = (QMetaType::Type)v.type();
|
||||
if (t == QMetaType::Int)
|
||||
if (v.isNull() && !v.isValid())
|
||||
p = pack_nil(p, wr);
|
||||
else if (t == QMetaType::Int)
|
||||
p = pack_int(v.toInt(), p, wr);
|
||||
else if (t == QMetaType::UInt)
|
||||
p = pack_uint(v.toUInt(), p, wr);
|
||||
@ -59,6 +61,12 @@ quint8 *MsgPackPrivate::pack(const QVariant &v, quint8 *p, bool wr, QVector<QByt
|
||||
return p;
|
||||
}
|
||||
|
||||
quint8 *MsgPackPrivate::pack_nil(quint8 *p, bool wr)
|
||||
{
|
||||
if (wr) *p = MsgPack::FirstByte::NIL;
|
||||
return p + 1;
|
||||
}
|
||||
|
||||
quint8 *MsgPackPrivate::pack_int(qint32 i, quint8 *p, bool wr)
|
||||
{
|
||||
if (i >= -32 && i <= 127) {
|
||||
|
@ -27,6 +27,8 @@ extern bool compatibilityMode;
|
||||
|
||||
quint8 * pack(const QVariant &v, quint8 *p, bool wr, QVector<QByteArray> &user_data);
|
||||
|
||||
quint8 * pack_nil(quint8 *p, bool wr);
|
||||
|
||||
quint8 * pack_int(qint32 i, quint8 *p, bool wr);
|
||||
quint8 * pack_uint(quint32 i, quint8 *p, bool wr);
|
||||
quint8 * pack_longlong(qint64 i, quint8 *p, bool wr);
|
||||
|
@ -87,6 +87,7 @@ quint8 * MsgPackPrivate::unpack_nil(QVariant &v, quint8 *p)
|
||||
{
|
||||
Q_UNUSED(p)
|
||||
Q_UNUSED(v)
|
||||
v = QVariant();
|
||||
return p + 1;
|
||||
}
|
||||
|
||||
@ -94,6 +95,7 @@ quint8 * MsgPackPrivate::unpack_never_used(QVariant &v, quint8 *p)
|
||||
{
|
||||
Q_UNUSED(p)
|
||||
Q_UNUSED(v)
|
||||
v = QVariant();
|
||||
return p + 1;
|
||||
}
|
||||
|
||||
|
@ -68,6 +68,7 @@ void QtTypesTest::test_qtime()
|
||||
QByteArray packed = MsgPack::pack(t);
|
||||
QTime t2 = MsgPack::unpack(packed).toTime();
|
||||
QVERIFY(t == t2);
|
||||
qDebug() << packed.toHex();
|
||||
QVERIFY(packed.size() == 3);
|
||||
|
||||
t = QTime(12, 01, 01, 0);
|
||||
|
Reference in New Issue
Block a user