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
/// 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;
}
/// PICout with Qt
inline PICout operator<<(PICout s, const QVariant & v) {
s << Q2PIVariant(v);
return s;
}
inline PICout operator<<(PICout s, const QByteArray & v) {
s << Q2PIByteArray(v);
return s;
}
inline PICout operator<<(PICout s, const QString & v) {
s << Q2PIString(v);
return s;
}
inline PICout operator<<(PICout s, const QStringList & v) {
s << Q2PIStringList(v);
return s;
}
#if QT_VERSION_MAJOR == 5
template
inline PICout operator<<(PICout s, const QVector & v) {
s << Q2PIVector(v);
return s;
}
#endif
template
inline PICout operator<<(PICout s, const QList & v) {
s << Q2PIVector(v);
return s;
}
template
inline PICout operator<<(PICout s, const QMap & v) {
s << Q2PIMap(v);
return s;
}
inline PICout operator<<(PICout s, const QTime & v) {
s << Q2PITime(v);
return s;
}
inline PICout operator<<(PICout s, const QDate & v) {
s << Q2PIDate(v);
return s;
}
inline PICout operator<<(PICout s, const QDateTime & v) {
s << Q2PIDateTime(v);
return s;
}
inline PICout operator<<(PICout s, const QPoint & v) {
s << Q2PIPoint(v);
return s;
}
inline PICout operator<<(PICout s, const QPointF & v) {
s << Q2PIPoint(v);
return s;
}
inline PICout operator<<(PICout s, const QLine & v) {
s << Q2PILine(v);
return s;
}
inline PICout operator<<(PICout s, const QLineF & v) {
s << Q2PILine(v);
return s;
}
inline PICout operator<<(PICout s, const QRect & v) {
s << Q2PIRect(v);
return s;
}
inline PICout operator<<(PICout s, const QRectF & v) {
s << Q2PIRect(v);
return s;
}
inline PICout operator<<(PICout s, const QColor & v) {
s << Q2PIColor(v);
return s;
}
inline PICout operator<<(PICout s, const QVector2D & v) {
s << PIMathVectorT2d({v[0], v[1]});
return s;
}
inline PICout operator<<(PICout s, const QVector3D & v) {
s << PIMathVectorT3d({v[0], v[1], v[2]});
return s;
}
inline PICout operator<<(PICout s, const QVector4D & v) {
s << PIMathVectorT4d({v[0], v[1], v[2], v[3]});
return s;
}
template
inline PICout operator<<(PICout s, const QGenericMatrix & v) {
s << Q2PIMathMatrixT(v);
return s;
}
inline PICout operator<<(PICout s, const QMatrix4x4 & v) {
s << Q2PIMathMatrixT(v);
return s;
}
#ifdef PIQT_HAS_GEOPOSITION
inline PICout operator<<(PICout s, const QGeoCoordinate & v) {
s << Q2PIGeoPosition(v);
return s;
}
#endif
#endif // PIQT_H