summaryrefslogtreecommitdiff
path: root/daemon/packer.h
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2014-12-01 02:21:30 +0100
committerJavier <dev.git@javispedro.com>2014-12-01 02:21:30 +0100
commit1e3794c476caf5c41360c36cc13c8425ec0dd26c (patch)
treef86693c5e17671f821871f95e462f299170277e0 /daemon/packer.h
parentcf405034b49e5e8ba7a8d22522878c8834b8d4ae (diff)
implement message passing around jskit apps and watch
Diffstat (limited to 'daemon/packer.h')
-rw-r--r--daemon/packer.h67
1 files changed, 67 insertions, 0 deletions
diff --git a/daemon/packer.h b/daemon/packer.h
new file mode 100644
index 0000000..d22072c
--- /dev/null
+++ b/daemon/packer.h
@@ -0,0 +1,67 @@
+#ifndef PACKER_H
+#define PACKER_H
+
+#include <QtEndian>
+#include <QByteArray>
+#include <QString>
+#include <QUuid>
+#include <QVariantMap>
+#include <Log4Qt/Logger>
+
+class Packer
+{
+ LOG4QT_DECLARE_STATIC_LOGGER(logger, Packer)
+
+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 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