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
template QByteArray qSerialize(const T & value) {
QByteArray ret;
QDataStream s(&ret, QIODevice::ReadWrite);
s << value;
return ret;
}
template T qDeserialize(const QByteArray & data) {
T ret;
if (!data.isEmpty()) {
QDataStream s(data);
s >> ret;
}
return ret;
}
/// PIP with QByteArray
template QByteArray piqSerialize(const T & value) {
PIByteArray ret;
ret << value;
return PI2QByteArray(ret);
}
template T piqDeserialize(const QByteArray & data) {
T ret;
if (!data.isEmpty()) {
PIByteArray ba = Q2PIByteArray(data);
ba >> ret;
}
return ret;
}
#endif // PIQT_H