diff options
Diffstat (limited to 'rockworkd/libpebble/watchdatawriter.h')
| -rw-r--r-- | rockworkd/libpebble/watchdatawriter.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/rockworkd/libpebble/watchdatawriter.h b/rockworkd/libpebble/watchdatawriter.h new file mode 100644 index 0000000..8e4adde --- /dev/null +++ b/rockworkd/libpebble/watchdatawriter.h @@ -0,0 +1,69 @@ +#ifndef WATCHDATAWRITER_H +#define WATCHDATAWRITER_H + +#include <QtEndian> +#include <QByteArray> +#include <QString> +#include <QUuid> +#include <QVariantMap> +#include <QLoggingCategory> + +class WatchDataWriter +{ +public: + WatchDataWriter(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 writePascalString(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 WatchDataWriter::WatchDataWriter(QByteArray *buf) + : _buf(buf) +{ +} + +template <typename T> +void WatchDataWriter::write(T v) +{ + qToBigEndian(v, up(sizeof(T))); +} + +template <typename T> +void WatchDataWriter::writeLE(T v) +{ + qToLittleEndian(v, up(sizeof(T))); +} + +inline char * WatchDataWriter::p(int n) +{ + int size = _buf->size(); + _buf->resize(size + n); + return &_buf->data()[size]; +} + +inline uchar * WatchDataWriter::up(int n) +{ + return reinterpret_cast<uchar *>(p(n)); +} + +#endif |
