From 9389cb546ca26b13905eb8418b48c6e11675f2c0 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Mon, 13 Jul 2020 16:28:13 +0300 Subject: [PATCH] Refactoring. Redesign a container reversing method. --- src/libs/vgeometry/vabstractcurve.cpp | 6 +++--- src/libs/vgeometry/varc.cpp | 3 ++- src/libs/vgeometry/vgobject.h | 26 ----------------------- src/libs/vlayout/vabstractpiece.cpp | 2 +- src/libs/vmisc/appimage.cpp | 26 +++-------------------- src/libs/vmisc/compatibility.h | 19 +++++++++++++++++ src/libs/vpatterndb/vpiece.cpp | 3 ++- src/libs/vpatterndb/vpiecepath.cpp | 6 +++--- src/libs/vwidgets/vabstractmainwindow.cpp | 21 ++---------------- 9 files changed, 35 insertions(+), 77 deletions(-) diff --git a/src/libs/vgeometry/vabstractcurve.cpp b/src/libs/vgeometry/vabstractcurve.cpp index 9c181353f..056c21bde 100644 --- a/src/libs/vgeometry/vabstractcurve.cpp +++ b/src/libs/vgeometry/vabstractcurve.cpp @@ -87,7 +87,7 @@ QVector VAbstractCurve::GetSegmentPoints(const QVector &points QVector segment = points; if (reverse) { - segment = GetReversePoints(segment); + segment = Reverse(segment); } QPointF start = begin; @@ -217,9 +217,9 @@ QVector VAbstractCurve::FromBegin(const QVector &points, const //--------------------------------------------------------------------------------------------------------------------- QVector VAbstractCurve::ToEnd(const QVector &points, const QPointF &end, bool *ok) { - QVector reversed = GetReversePoints(points); + QVector reversed = Reverse(points); reversed = FromBegin(reversed, end, ok); - return GetReversePoints(reversed); + return Reverse(reversed); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vgeometry/varc.cpp b/src/libs/vgeometry/varc.cpp index eac0ad5dc..3312f67cd 100644 --- a/src/libs/vgeometry/varc.cpp +++ b/src/libs/vgeometry/varc.cpp @@ -33,6 +33,7 @@ #include "../vmisc/def.h" #include "../vmisc/vmath.h" +#include "../vmisc/compatibility.h" #include "../ifc/ifcdef.h" #include "vabstractcurve.h" #include "varc_p.h" @@ -307,7 +308,7 @@ QVector VArc::GetPoints() const points << splPoints; pStart = lineP4P3.p1(); } - return IsFlipped() ? VGObject::GetReversePoints(points) : points; + return IsFlipped() ? Reverse(points) : points; } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vgeometry/vgobject.h b/src/libs/vgeometry/vgobject.h index 112e6904d..e402ad037 100644 --- a/src/libs/vgeometry/vgobject.h +++ b/src/libs/vgeometry/vgobject.h @@ -103,9 +103,6 @@ public: static QPointF CorrectDistortion(const QPointF &t, const QPointF &p1, const QPointF &p2); static bool IsPointOnLineviaPDP(const QPointF &t, const QPointF &p1, const QPointF &p2, qreal accuracy = accuracyPointOnLine); - - template - static QVector GetReversePoints(const QVector &points); static int GetLengthContour(const QVector &contour, const QVector &newPoints); protected: static QTransform FlippingMatrix(const QLineF &axis); @@ -115,29 +112,6 @@ private: static int PointInCircle (const QPointF &p, const QPointF ¢er, qreal radius); }; -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief GetReversePoint return revers container of points. - * @param points container with points. - * @return reverced points. - */ -template -QVector VGObject::GetReversePoints(const QVector &points) -{ - if (points.isEmpty()) - { - return points; - } - QVector reversePoints(points.size()); - qint32 j = 0; - for (qint32 i = points.size() - 1; i >= 0; --i) - { - reversePoints.replace(j, points.at(i)); - ++j; - } - return reversePoints; -} - Q_DECLARE_TYPEINFO(VGObject, Q_MOVABLE_TYPE); #endif // VGOBJECT_H diff --git a/src/libs/vlayout/vabstractpiece.cpp b/src/libs/vlayout/vabstractpiece.cpp index 1f6518454..e51c79ceb 100644 --- a/src/libs/vlayout/vabstractpiece.cpp +++ b/src/libs/vlayout/vabstractpiece.cpp @@ -1755,7 +1755,7 @@ QVector VAbstractPiece::RollbackSeamAllowance(QVector { clipped.append(points.at(j)); } - points = VGObject::GetReversePoints(clipped); + points = Reverse(clipped); *success = true; break; } diff --git a/src/libs/vmisc/appimage.cpp b/src/libs/vmisc/appimage.cpp index dc74dce34..5b1fb0117 100644 --- a/src/libs/vmisc/appimage.cpp +++ b/src/libs/vmisc/appimage.cpp @@ -39,26 +39,6 @@ extern "C" { #include "../vmisc/def.h" #include "compatibility.h" -namespace -{ -//--------------------------------------------------------------------------------------------------------------------- -QStringList ReverseList(const QStringList &list) -{ - if (list.isEmpty()) - { - return list; - } - QVector reversedList(list.size()); - qint32 j = 0; - for (qint32 i = list.size() - 1; i >= 0; --i) - { - reversedList.replace(j, list.at(i)); - ++j; - } - return ConvertToList(reversedList); -} -} - //--------------------------------------------------------------------------------------------------------------------- /* When deploying with AppImage based on OpenSuse, the ICU library has a hardcoded path to the icudt*.dat file. * This prevents the library from using shared in memory data. There are few ways to resolve this issue. According @@ -112,8 +92,8 @@ QString AppImageRoot(const QString &applicationDir, const QString &defaultAppDir return QString(); } - appSub = ReverseList(appSub); - defaultSub = ReverseList(defaultSub); + appSub = Reverse(appSub); + defaultSub = Reverse(defaultSub); for (int i = 0; i < defaultSub.size(); ++i) { @@ -124,7 +104,7 @@ QString AppImageRoot(const QString &applicationDir, const QString &defaultAppDir } QStringList rootSub = appSub.mid(defaultSub.size()); - rootSub = ReverseList(rootSub); + rootSub = Reverse(rootSub); return '/' + rootSub.join('/'); } diff --git a/src/libs/vmisc/compatibility.h b/src/libs/vmisc/compatibility.h index f00bdccf0..8440957c7 100644 --- a/src/libs/vmisc/compatibility.h +++ b/src/libs/vmisc/compatibility.h @@ -181,6 +181,25 @@ inline void Move(T &vector, int from, int to) QT_WARNING_POP } +//--------------------------------------------------------------------------------------------------------------------- +template +T Reverse(const T &container) +{ + if (container.isEmpty()) + { + return container; + } + T reversed; + reversed.reserve(container.size()); + qint32 j = 0; + for (qint32 i = container.size() - 1; i >= 0; --i) + { + reversed.replace(j, container.at(i)); + ++j; + } + return reversed; +} + //--------------------------------------------------------------------------------------------------------------------- template inline void AppendTo(Cont &container, const Input &input) diff --git a/src/libs/vpatterndb/vpiece.cpp b/src/libs/vpatterndb/vpiece.cpp index 1d6713742..c22fc3ec4 100644 --- a/src/libs/vpatterndb/vpiece.cpp +++ b/src/libs/vpatterndb/vpiece.cpp @@ -35,6 +35,7 @@ #include "../vgeometry/varc.h" #include "vcontainer.h" #include "../vmisc/vabstractapplication.h" +#include "../vmisc/compatibility.h" #include "../ifc/exception/vexceptioninvalidnotch.h" #include "../vlayout/testpath.h" @@ -780,7 +781,7 @@ QVector VPiece::GetUnitedPath(const VContainer *data) const QVector customNodes = data->GetPiecePath(records.at(i).path).GetNodes(); if (records.at(i).reverse) { - customNodes = VGObject::GetReversePoints(customNodes); + customNodes = Reverse(customNodes); } for (int j = 0; j < customNodes.size(); ++j) diff --git a/src/libs/vpatterndb/vpiecepath.cpp b/src/libs/vpatterndb/vpiecepath.cpp index 6f272d2c3..dbaced0b3 100644 --- a/src/libs/vpatterndb/vpiecepath.cpp +++ b/src/libs/vpatterndb/vpiecepath.cpp @@ -33,6 +33,7 @@ #include "../vlayout/vabstractpiece.h" #include "calculator.h" #include "../vmisc/vabstractapplication.h" +#include "../vmisc/compatibility.h" #include "../ifc/exception/vexceptionobjecterror.h" #include @@ -391,8 +392,7 @@ QVector VPiecePath::PathPoints(const VContainer *data, const QVector VPiecePath::SeamAllowancePoints(const VContainer *data, qreal if (reverse) { - pointsEkv = VGObject::GetReversePoints(pointsEkv); + pointsEkv = Reverse(pointsEkv); } return pointsEkv; diff --git a/src/libs/vwidgets/vabstractmainwindow.cpp b/src/libs/vwidgets/vabstractmainwindow.cpp index 9c0d2b108..5c4277b3a 100644 --- a/src/libs/vwidgets/vabstractmainwindow.cpp +++ b/src/libs/vwidgets/vabstractmainwindow.cpp @@ -45,29 +45,12 @@ namespace { -//--------------------------------------------------------------------------------------------------------------------- -QStringList ReverseList(const QStringList &list) -{ - if (list.isEmpty()) - { - return list; - } - QVector reversedList(list.size()); - qint32 j = 0; - for (qint32 i = list.size() - 1; i >= 0; --i) - { - reversedList.replace(j, list.at(i)); - ++j; - } - return ConvertToList(reversedList); -} - //--------------------------------------------------------------------------------------------------------------------- QStringList SelectNumber(QStringList path, int number) { - path = ReverseList(path); + path = Reverse(path); QStringList subPath = path.mid(0, number); - return ReverseList(subPath); + return Reverse(subPath); } //---------------------------------------------------------------------------------------------------------------------