#ifndef PACKER_H #define PACKER_H #include #include #include #include #include #include class Packer { static QLoggingCategory l; public: Packer(QByteArray *buf); template void write(T v); template 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 &d); private: char *p(int n); uchar *up(int n); QByteArray *_buf; }; inline Packer::Packer(QByteArray *buf) : _buf(buf) { } template void Packer::write(T v) { qToBigEndian(v, up(sizeof(T))); } template 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(p(n)); } #endif // PACKER_H