summaryrefslogtreecommitdiff
path: root/daemon/packer.h
diff options
context:
space:
mode:
authorTomasz Sterna <tomek@xiaoka.com>2015-01-03 16:38:02 +0100
committerTomasz Sterna <tomek@xiaoka.com>2015-01-03 19:07:48 +0100
commit4e7da1944f5fa75a0739c0757d40a8102f045365 (patch)
tree5f3fe179256536e4135eb4d5031a1d754af5e26c /daemon/packer.h
parent4150005566bec7827ce1cdd759a2397d47eba583 (diff)
parente6ec758b364fcaf9fda35e56740c3fcd7e8fe25e (diff)
Merge remote-tracking branch 'javispedro/js-testing'
Conflicts: daemon/daemon.pro daemon/dbusconnector.cpp daemon/manager.cpp daemon/watchcommands.cpp daemon/watchcommands.h daemon/watchconnector.cpp daemon/watchconnector.h log4qt-debug.conf log4qt-release.conf rpm/pebble.spec rpm/pebble.yaml
Diffstat (limited to 'daemon/packer.h')
-rw-r--r--daemon/packer.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/daemon/packer.h b/daemon/packer.h
new file mode 100644
index 0000000..fbf5f4b
--- /dev/null
+++ b/daemon/packer.h
@@ -0,0 +1,69 @@
+#ifndef PACKER_H
+#define PACKER_H
+
+#include <QtEndian>
+#include <QByteArray>
+#include <QString>
+#include <QUuid>
+#include <QVariantMap>
+#include <QLoggingCategory>
+
+class Packer
+{
+ static QLoggingCategory l;
+
+public:
+ Packer(QByteArray *buf);
+
+ template <typename T>
+ void write(T v);
+
+ template <typename T>
+ void writeLE(T v);
+
+ void writeBytes(int n, const QByteArray &b);
+
+ void writeFixedString(int n, const QString &s);
+
+ void writeCString(const QString &s);
+
+ void writeUuid(const QUuid &uuid);
+
+ void writeDict(const QMap<int, QVariant> &d);
+
+private:
+ char *p(int n);
+ uchar *up(int n);
+ QByteArray *_buf;
+};
+
+inline Packer::Packer(QByteArray *buf)
+ : _buf(buf)
+{
+}
+
+template <typename T>
+void Packer::write(T v)
+{
+ qToBigEndian(v, up(sizeof(T)));
+}
+
+template <typename T>
+void Packer::writeLE(T v)
+{
+ qToLittleEndian(v, up(sizeof(T)));
+}
+
+inline char * Packer::p(int n)
+{
+ int size = _buf->size();
+ _buf->resize(size + n);
+ return &_buf->data()[size];
+}
+
+inline uchar * Packer::up(int n)
+{
+ return reinterpret_cast<uchar *>(p(n));
+}
+
+#endif // PACKER_H