From 6c579b169b9c0a362ce049947d0da708a60dbf7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=8B=D1=87=D0=BA=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Wed, 27 Feb 2019 11:29:26 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@500 a8b55f48-bf90-11e4-a774-851b48703e85 --- piqt/piqt.cpp | 36 ++++++++++++++++++++++++++++ piqt/piqt.h | 53 ++++++++++++++++++++++++++++------------- qad/utils/qad_types.cpp | 8 +++++++ qad/utils/qad_types.h | 20 ++++++++++++++++ 4 files changed, 101 insertions(+), 16 deletions(-) diff --git a/piqt/piqt.cpp b/piqt/piqt.cpp index dfb1f19..bd70b1c 100644 --- a/piqt/piqt.cpp +++ b/piqt/piqt.cpp @@ -81,3 +81,39 @@ const PIVariant Q2PIVariant(const QVariant & v) { if (v.canConvert()) return PIVariant(QAD2PIIODevice(v.value())); return PIVariant(); } + + +const PIVariantTypes::IODevice QAD2PIIODevice(const QAD::IODevice & v) { + PIVariantTypes::IODevice d; + d.set(Q2PIPropertyStorage(v.props)); + d.prefix = Q2PIString(v.prefix); + d.mode = v.mode; + d.options = v.options; + return d; +} + + +const QAD::IODevice PI2QADIODevice(const PIVariantTypes::IODevice & v) { + return QAD::IODevice(PI2QString(v.prefix), PI2QPropertyStorage(v.get()), v.mode, v.options); +} + + +const QAD::File PI2QADFile(const PIVariantTypes::File & v) { + return QAD::File(PI2QString(v.file), PI2QString(v.filter), v.is_abs); +} + + +const QAD::Dir PI2QADDir(const PIVariantTypes::Dir & v) { + return QAD::Dir(PI2QString(v.dir), v.is_abs); +} + + +const PIVariantTypes::File QAD2PIFile(const QAD::File & v) { + return PIVariantTypes::File(Q2PIString(v.file), Q2PIString(v.filter), v.is_abs); +} + + +const PIVariantTypes::Dir QAD2PIDir(const QAD::Dir & v) { + return PIVariantTypes::Dir(Q2PIString(v.dir), v.is_abs); +} + diff --git a/piqt/piqt.h b/piqt/piqt.h index 7622581..db7bc60 100644 --- a/piqt/piqt.h +++ b/piqt/piqt.h @@ -1,7 +1,7 @@ #ifndef PIQT_H #define PIQT_H -#include "pimathvector.h" +#include "pimathmatrix.h" #include "pipropertystorage.h" #include "qad_types.h" #include @@ -41,6 +41,35 @@ inline const PIPointd Q2PIPoint(const QPointF & v) {return PIPointd(v.x(), v.y() inline const QRectF PI2QRect(const PIRectd & v) {return QRectF(v.x0, v.y0, v.width(), v.height());} inline const PIRectd Q2PIRect(const QRectF & v) {return PIRectd(v.x(), v.y(), v.width(), v.height());} +inline const QAD::MathVector PI2QMathVector(const PIMathVectord & v) { + QVector q = QVector(v.size()); + memcpy(q.data(), v.data(), q.size()*sizeof(double)); + return QAD::MathVector(q); +} +inline const PIMathVectord Q2PIMathVector(const QAD::MathVector & v) { + PIMathVectord p = PIMathVectord(v.v.size()); + memcpy(p.data(), v.v.data(), p.size()*sizeof(double)); + return p; +} + +inline const QAD::MathMatrix PI2QMathMatrix(const PIMathMatrixd & v) { + PIVector > p = v.toVectors(); + QVector > q = QVector >(p.size()); + for (int i = 0; i < q.size(); ++i) { + q[i].resize(p[i].size()); + memcpy(q[i].data(), p[i].data(), q[i].size()*sizeof(double)); + } + return QAD::MathMatrix(q); +} +inline const PIMathMatrixd Q2PIMathMatrix(const QAD::MathMatrix & v) { + PIVector > p = PIVector >(v.m.size()); + for (int i = 0; i < v.m.size(); ++i) { + p[i].resize(v.m[i].size()); + memcpy(p[i].data(), v.m[i].data(), p[i].size()*sizeof(double)); + } + return PIMathMatrixd(p); +} + inline const QDate PI2QDate(const PIDate & v) {return QDate(v.year, v.month, v.day);} inline const QTime PI2QTime(const PITime & v) {return QTime(v.hours, v.minutes, v.seconds, v.milliseconds);} @@ -54,6 +83,7 @@ inline const PIDateTime Q2PIDateTime(const QDateTime & v) {return PIDateTime(Q2P inline const QColor PI2QColor(const PIVariantTypes::Color & v) {return QColor::fromRgba(v.rgba);} inline const PIVariantTypes::Color Q2PIColor(const QColor & v) {return PIVariantTypes::Color(v.rgba());} + inline PIPropertyStorage Q2PIPropertyStorage(const PropertyStorage & props) { PIPropertyStorage ret; foreach (const PropertyStorage::Property & p, props) @@ -70,22 +100,13 @@ inline PropertyStorage PI2QPropertyStorage(const PIPropertyStorage & props) { const QAD::Enum PI2QADEnum(const PIVariantTypes::Enum & el); -inline const QAD::File PI2QADFile(const PIVariantTypes::File & v) {return QAD::File(PI2QString(v.file), PI2QString(v.filter), v.is_abs);} -inline const QAD::Dir PI2QADDir(const PIVariantTypes::Dir & v) {return QAD::Dir(PI2QString(v.dir), v.is_abs);} -inline const QAD::IODevice PI2QADIODevice(const PIVariantTypes::IODevice & v) { - return QAD::IODevice(PI2QString(v.prefix), PI2QPropertyStorage(v.get()), v.mode, v.options); -} +const QAD::File PI2QADFile(const PIVariantTypes::File & v); +const QAD::Dir PI2QADDir(const PIVariantTypes::Dir & v); +const QAD::IODevice PI2QADIODevice(const PIVariantTypes::IODevice & v); const PIVariantTypes::Enum QAD2PIEnum(const QAD::Enum & el); -inline const PIVariantTypes::File QAD2PIFile(const QAD::File & v) {return PIVariantTypes::File(Q2PIString(v.file), Q2PIString(v.filter), v.is_abs);} -inline const PIVariantTypes::Dir QAD2PIDir(const QAD::Dir & v) {return PIVariantTypes::Dir(Q2PIString(v.dir), v.is_abs);} -inline const PIVariantTypes::IODevice QAD2PIIODevice(const QAD::IODevice & v) { - PIVariantTypes::IODevice d; - d.set(Q2PIPropertyStorage(v.props)); - d.prefix = Q2PIString(v.prefix); - d.mode = v.mode; - d.options = v.options; - return d; -} +const PIVariantTypes::File QAD2PIFile(const QAD::File & v); +const PIVariantTypes::Dir QAD2PIDir(const QAD::Dir & v); +const PIVariantTypes::IODevice QAD2PIIODevice(const QAD::IODevice & v); //inline const PIVariant QString2PIVariant(const QString & v) {return PIVariant::readFromString(QString2PIString(v));} diff --git a/qad/utils/qad_types.cpp b/qad/utils/qad_types.cpp index afaa84c..3acc86e 100644 --- a/qad/utils/qad_types.cpp +++ b/qad/utils/qad_types.cpp @@ -39,6 +39,12 @@ __QADTypesRegistrator__::__QADTypesRegistrator__() { qRegisterMetaType("QAD::IODevice"); qRegisterMetaTypeStreamOperators("QAD::IODevice"); + qRegisterMetaType("QAD::MathVector"); + qRegisterMetaTypeStreamOperators("QAD::MathVector"); + + qRegisterMetaType("QAD::MathMatrix"); + qRegisterMetaTypeStreamOperators("QAD::MathMatrix"); + #if QT_VERSION >= 0x050200 QMetaType::registerConverter(&QAD::Enum::selectedValue); QMetaType::registerConverter(&QAD::Enum::selectedName); @@ -185,6 +191,8 @@ QVariant::Type typeFromLetter(const QString & l) { if (ft == "F") return (QVariant::Type)qMetaTypeId(); if (ft == "D") return (QVariant::Type)qMetaTypeId(); if (ft == "d") return (QVariant::Type)qMetaTypeId(); + if (ft == "V") return (QVariant::Type)qMetaTypeId(); + if (ft == "M") return (QVariant::Type)qMetaTypeId(); return QVariant::String; } diff --git a/qad/utils/qad_types.h b/qad/utils/qad_types.h index aade459..71cbeb3 100644 --- a/qad/utils/qad_types.h +++ b/qad/utils/qad_types.h @@ -59,6 +59,16 @@ namespace QAD { PropertyStorage props; }; + struct MathVector { + MathVector(const QVector & vec = QVector()) {v = vec;} + QVector v; + }; + + struct MathMatrix { + MathMatrix(const QVector > & mat = QVector > ()) {m = mat;} + QVector > m; // [Row][Column] + }; + } Q_DECLARE_METATYPE(QAD::Enumerator) @@ -86,6 +96,16 @@ inline QDataStream & operator <<(QDataStream & s, const QAD::IODevice & v) {s << inline QDataStream & operator >>(QDataStream & s, QAD::IODevice & v) {s >> v.prefix >> v.mode >> v.options >> v.props; return s;} inline QDebug operator <<(QDebug s, const QAD::IODevice & v) {s.nospace() << v.toString(); return s.space();} +Q_DECLARE_METATYPE(QAD::MathVector) +inline QDataStream & operator <<(QDataStream & s, const QAD::MathVector & v) {s << v.v; return s;} +inline QDataStream & operator >>(QDataStream & s, QAD::MathVector & v) {s >> v.v; return s;} +inline QDebug operator <<(QDebug s, const QAD::MathVector & v) {s.nospace() << "Vector " << v.v; return s.space();} + +Q_DECLARE_METATYPE(QAD::MathMatrix) +inline QDataStream & operator <<(QDataStream & s, const QAD::MathMatrix & v) {s << v.m; return s;} +inline QDataStream & operator >>(QDataStream & s, QAD::MathMatrix & v) {s >> v.m; return s;} +inline QDebug operator <<(QDebug s, const QAD::MathMatrix & v) {s.nospace() << "Matrix " << v.m; return s.space();} + class __QADTypesRegistrator__ { public: