From 7415c0968b90352efcce8a8e681406fb27d2483a Mon Sep 17 00:00:00 2001 From: Isaikin Roman Date: Sun, 7 Sep 2014 22:24:14 +0400 Subject: [PATCH] work in progress... --- main.cpp | 17 +++++++++++++++++ msgpack.cpp | 29 +++++++++++++++++++++++++++++ msgpack.h | 12 ++++++++++++ private/msgpack_p.cpp | 6 ++++++ private/msgpack_p.h | 33 +++++++++++++++++++++++++++++++++ private/types.gnumeric | Bin 0 -> 5688 bytes qmsgpack.pro | 24 ++++++++++++++++++++++++ 7 files changed, 121 insertions(+) create mode 100644 main.cpp create mode 100644 msgpack.cpp create mode 100644 msgpack.h create mode 100644 private/msgpack_p.cpp create mode 100644 private/msgpack_p.h create mode 100644 private/types.gnumeric create mode 100644 qmsgpack.pro diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..5580da3 --- /dev/null +++ b/main.cpp @@ -0,0 +1,17 @@ +#include +#include +#include + +void test(quint8 *p) { + p++; +} + +int main(int argc, char *argv[]) +{ + QCoreApplication a(argc, argv); + + qDebug() << "MsgPack"; + qDebug() << MsgPack::deserialize(QByteArray::fromHex("fffeece1e0")); + + return a.exec(); +} diff --git a/msgpack.cpp b/msgpack.cpp new file mode 100644 index 0000000..1ff2eb6 --- /dev/null +++ b/msgpack.cpp @@ -0,0 +1,29 @@ +#include "msgpack.h" +#include + +QVariantList MsgPack::deserialize(const QByteArray &data) +{ + QVariantList d; + int i = 0; + + quint8 *p = (quint8 *)data.data(); + while (i < data.size()) { + if (p[i] <= 127) { // positive fixint 0x00 - 0x7f + quint32 val = (quint32)p[i]; + d.append(QVariant(val)); + i += 1; + } + if (p[i] >= 0xe0) { // negative fixint 0xe0 - 0xff + quint8 val8 = (quint8)p[i]; + val8 &= ~((1 << 7) | (1 << 6) | (1 << 5)); + qint32 val = 31 - val8; + val ^= 0xffffffff; + d.append(QVariant((qint32)val)); + i += 1; + } + + + } + + return d; +} diff --git a/msgpack.h b/msgpack.h new file mode 100644 index 0000000..635a0dc --- /dev/null +++ b/msgpack.h @@ -0,0 +1,12 @@ +#ifndef MSGPACK_H +#define MSGPACK_H +#include +#include + +namespace MsgPack +{ + + QVariantList deserialize(const QByteArray &data); +} + +#endif // MSGPACK_H diff --git a/private/msgpack_p.cpp b/private/msgpack_p.cpp new file mode 100644 index 0000000..097438a --- /dev/null +++ b/private/msgpack_p.cpp @@ -0,0 +1,6 @@ +#include "msgpack_p.h" + +static quint8 MsgPackPrivate::data_sizes[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // fixmap upto 15 elements + +}; diff --git a/private/msgpack_p.h b/private/msgpack_p.h new file mode 100644 index 0000000..02ce193 --- /dev/null +++ b/private/msgpack_p.h @@ -0,0 +1,33 @@ +#ifndef MSGPACK_P_H +#define MSGPACK_P_H +#include + +/* parser functions: + * QVariant _type_(quint8 *p, int &i); + * parses some type, which data is stored at p + * + */ + +namespace MsgPackPrivate +{ +/* data sizes for types from 0x7f to 0xe0 + * (without positive and negative fixint) + ** fixed size types: + * possible values: 1, 2, 3, 4, 5, 6, 9, 10, 18 - bytes + * 254 - size is in next 1 byte + * 253 - 2 + * 251 - 4 + ** ext formats: + * 126 - size is in next byte + 1 type byte + * 125 - 2 byte size + 1 type byte + * 123 - 4 byte size + 1 type byte + */ + + static quint8 data_sizes[96]; + + QVariant positive_fixint(quint8 *p); + + +} + +#endif // MSGPACK_P_H diff --git a/private/types.gnumeric b/private/types.gnumeric new file mode 100644 index 0000000000000000000000000000000000000000..7202466cf331726b7c3d793e6fcde81862ab62d0 GIT binary patch literal 5688 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 O&t89F=^6fW3=9B&2~|u0 literal 0 HcmV?d00001 diff --git a/qmsgpack.pro b/qmsgpack.pro new file mode 100644 index 0000000..94dc41c --- /dev/null +++ b/qmsgpack.pro @@ -0,0 +1,24 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2014-09-07T17:43:05 +# +#------------------------------------------------- + +QT += core + +QT -= gui + +TARGET = qmsgpack +#CONFIG += console +CONFIG -= app_bundle + +TEMPLATE = app + + +SOURCES += main.cpp \ + msgpack.cpp \ + private/msgpack_p.cpp + +HEADERS += \ + msgpack.h \ + private/msgpack_p.h