From 0608834db30667a549ef820b4d2eb0ec488b3f14 Mon Sep 17 00:00:00 2001 From: peri4 Date: Wed, 11 May 2022 16:50:06 +0300 Subject: [PATCH] PIBinaryStream support --- libs/piqt/piqt.h | 89 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/libs/piqt/piqt.h b/libs/piqt/piqt.h index f6bcfce..75157ef 100644 --- a/libs/piqt/piqt.h +++ b/libs/piqt/piqt.h @@ -207,6 +207,8 @@ _PIQt_CONVERT(PIMathVectorT3d, QVector3D, PI2QVector3, Q2PIVector3) +#if PIP_VERSION < PIP_MAKE_VERSION(2,90,0) + inline PIByteArray & operator <<(PIByteArray & s, const QString & v) {s << Q2PIString(v); return s;} inline PIByteArray & operator >>(PIByteArray & s, QString & v) {PIString t; s >> t; v = PI2QString(t); return s;} inline PIByteArray & operator <<(PIByteArray & s, const QStringList & v) {s << Q2PIStringList(v); return s;} @@ -267,6 +269,93 @@ inline PIByteArray & operator >>(PIByteArray & s, QImage & v) { v = QImage(); return s;} +#else + +template inline PIBinaryStream

& operator <<(PIBinaryStream

& s, const QVector & v) { + s << PIVector(v.constData(), (size_t)v.size()); + return s; +} +template inline PIBinaryStream

& operator >>(PIBinaryStream

& s, QVector & v) { + PIVector t; s >> t; + v.resize(t.size_s()); + for (int i = 0; i < t.size_s(); ++i) + v[i] = t[i]; + return s; +} + +template inline PIBinaryStream

& operator <<(PIBinaryStream

& s, const QMap & v) { + PIMap t; + t.reserve(v.size()); + QMapIterator it(v); + while (it.hasNext()) {it.next(); t[it.key()] = it.value();} + s << t; + return s; +} +template inline PIBinaryStream

& operator >>(PIBinaryStream

& s, QMap & v) { + v.clear(); + PIMap t; s >> t; + auto it = t.makeIterator(); + while (it.hasNext()) {it.next(); v[it.key()] = it.value();} + return s; +} + +BINARY_STREAM_WRITE(QString) {s << Q2PIString(v); return s;} +BINARY_STREAM_READ (QString) {PIString t; s >> t; v = PI2QString(t); return s;} + +BINARY_STREAM_WRITE(QStringList) {s << Q2PIStringList(v); return s;} +BINARY_STREAM_READ (QStringList) {PIStringList t; s >> t; v = PI2QStringList(t); return s;} + +BINARY_STREAM_WRITE(QPolygonF) {s << (QVector)v; return s;} +BINARY_STREAM_READ (QPolygonF) {QVector t; s >> t; v = t; return s;} + +BINARY_STREAM_WRITE(QByteArray) {s << Q2PIByteArray(v); return s;} +BINARY_STREAM_READ (QByteArray) {PIByteArray t; s >> t; v = PI2QByteArray(t); return s;} + +BINARY_STREAM_WRITE(QDate) {s << Q2PIDate(v); return s;} +BINARY_STREAM_READ (QDate) {PIDate t; s >> t; v = PI2QDate(t); return s;} + +BINARY_STREAM_WRITE(QTime) {s << Q2PITime(v); return s;} +BINARY_STREAM_READ (QTime) {PITime t; s >> t; v = PI2QTime(t); return s;} + +BINARY_STREAM_WRITE(QDateTime) {s << Q2PIDateTime(v); return s;} +BINARY_STREAM_READ (QDateTime) {PIDateTime t; s >> t; v = PI2QDateTime(t); return s;} + +BINARY_STREAM_WRITE(QVariant) {s << Q2PIVariant(v); return s;} +BINARY_STREAM_READ (QVariant) {PIVariant t; s >> t; v = PI2QVariant(t); return s;} + +BINARY_STREAM_WRITE(PropertyStorage) {s << Q2PIPropertyStorage(v); return s;} +BINARY_STREAM_READ (PropertyStorage) {PIPropertyStorage t; s >> t; v = PI2QPropertyStorage(t); return s;} + +BINARY_STREAM_WRITE(QColor) {s << Q2PIColor(v); return s;} +BINARY_STREAM_READ (QColor) {PIVariantTypes::Color t; s >> t; v = PI2QColor(t); return s;} + +BINARY_STREAM_WRITE(QAD::Enum) {s << QAD2PIEnum(v); return s;} +BINARY_STREAM_READ (QAD::Enum) {PIVariantTypes::Enum t; s >> t; v = PI2QADEnum(t); return s;} + +BINARY_STREAM_WRITE(QAD::File) {s << QAD2PIFile(v); return s;} +BINARY_STREAM_READ (QAD::File) {PIVariantTypes::File t; s >> t; v = PI2QADFile(t); return s;} + +BINARY_STREAM_WRITE(QAD::Dir) {s << QAD2PIDir(v); return s;} +BINARY_STREAM_READ (QAD::Dir) {PIVariantTypes::Dir t; s >> t; v = PI2QADDir(t); return s;} + +BINARY_STREAM_WRITE(QAD::IODevice) {s << QAD2PIIODevice(v); return s;} +BINARY_STREAM_READ (QAD::IODevice) {PIVariantTypes::IODevice t; s >> t; v = PI2QADIODevice(t); return s;} + +BINARY_STREAM_WRITE(QImage) { + QByteArray ba; QBuffer buf(&ba); + v.save(&buf, "png"); + s << Q2PIByteArray(ba); + return s; +} +BINARY_STREAM_READ (QImage) { + PIByteArray pba; s >> pba; + QByteArray ba = PI2QByteArray(pba); + if (!v.loadFromData(ba, "png")) + v = QImage(); + return s; +} + +#endif /// pure Qt