Replaced hand-crafted find-algorithm with std::find_if. Removed a logical error (pos > points.size() never returns true).

This commit is contained in:
llocram 2020-08-28 14:18:41 +02:00
parent 1a2c5de357
commit 819bcadee4

View File

@ -1399,30 +1399,20 @@ QLineF VLayoutPiece::Edge(const QVector<QPointF> &path, int i) const
}
//---------------------------------------------------------------------------------------------------------------------
// NOTE: Once C++17 is made mandatory, this method can further be refactored with std::optional<int>
int VLayoutPiece::EdgeByPoint(const QVector<QPointF> &path, const QPointF &p1) const
{
if (p1.isNull())
if (p1.isNull() || path.count() < 3)
{
return 0;
}
if (path.count() < 3)
const auto points = Map(path);
const auto posIter = std::find_if(points.cbegin(), points.cend(),
[&p1](const auto &point){ return VFuzzyComparePoints(point, p1); });
if (posIter != points.cend())
{
return 0;
}
const QVector<QPointF> points = Map(path);
for (int i=0; i < points.size(); i++)
{
if (VFuzzyComparePoints(points.at(i), p1))
{
int pos = i+1;
if (pos > points.size())
{
pos = 1;
}
return pos;
}
return posIter - points.cbegin() + 1;
}
return 0; // Did not find edge
}