diff --git a/CPP/Clipper2Lib/clipper.core.h b/CPP/Clipper2Lib/clipper.core.h index 4dc0404e..59e792a5 100644 --- a/CPP/Clipper2Lib/clipper.core.h +++ b/CPP/Clipper2Lib/clipper.core.h @@ -176,10 +176,10 @@ inline Path ScalePath(const Path& path, double scale) result.reserve(path.size()); #ifdef USINGZ for (const Point& pt : path) - result.push_back(Point(pt.x * scale, pt.y * scale, pt.z)); + result.emplace_back(Point(pt.x * scale, pt.y * scale, pt.z)); #else for (const Point& pt : path) - result.push_back(Point(pt.x * scale, pt.y * scale)); + result.emplace_back(Point(pt.x * scale, pt.y * scale)); #endif return result; } @@ -190,7 +190,7 @@ inline Paths ScalePaths(const Paths& paths, double scale) Paths result; result.reserve(paths.size()); for (const Path& path : paths) - result.push_back(ScalePath(path, scale)); + result.emplace_back(ScalePath(path, scale)); return result; } @@ -255,13 +255,13 @@ inline Path StripNearEqual(const Path& path, result.reserve(path.size()); typename Path::const_iterator path_iter = path.cbegin(); Point first_pt = *path_iter++, last_pt = first_pt; - result.push_back(first_pt); + result.emplace_back(first_pt); for (; path_iter != path.cend(); ++path_iter) { if (!NearEqual(*path_iter, last_pt, max_dist_sqrd)) { last_pt = *path_iter; - result.push_back(last_pt); + result.emplace_back(last_pt); } } if (!is_closed_path) return result; @@ -279,7 +279,7 @@ inline Paths StripNearEqual(const Paths& paths, for (typename Paths::const_iterator paths_citer = paths.cbegin(); paths_citer != paths.cend(); ++paths_citer) { - result.push_back(StripNearEqual(*paths_citer, max_dist_sqrd, is_closed_path)); + result.emplace_back(StripNearEqual(*paths_citer, max_dist_sqrd, is_closed_path)); } return result; } @@ -292,13 +292,13 @@ inline Path StripDuplicates(const Path& path, bool is_closed_path) result.reserve(path.size()); typename Path::const_iterator path_iter = path.cbegin(); Point first_pt = *path_iter++, last_pt = first_pt; - result.push_back(first_pt); + result.emplace_back(first_pt); for (; path_iter != path.cend(); ++path_iter) { if (*path_iter != last_pt) { last_pt = *path_iter; - result.push_back(last_pt); + result.emplace_back(last_pt); } } if (!is_closed_path) return result; @@ -314,7 +314,7 @@ inline Paths StripDuplicates(const Paths& paths, bool is_closed_path) for (typename Paths::const_iterator paths_citer = paths.cbegin(); paths_citer != paths.cend(); ++paths_citer) { - result.push_back(StripDuplicates(*paths_citer, is_closed_path)); + result.emplace_back(StripDuplicates(*paths_citer, is_closed_path)); } return result; } diff --git a/CPP/Clipper2Lib/clipper.engine.cpp b/CPP/Clipper2Lib/clipper.engine.cpp index eed9b425..410ed36d 100644 --- a/CPP/Clipper2Lib/clipper.engine.cpp +++ b/CPP/Clipper2Lib/clipper.engine.cpp @@ -634,7 +634,7 @@ namespace Clipper2Lib { void ClipperBase::AddPath(const Path64& path, PathType polytype, bool is_open) { Paths64 tmp; - tmp.push_back(path); + tmp.emplace_back(path); AddPaths(tmp, polytype, is_open); } @@ -791,7 +791,7 @@ namespace Clipper2Lib { if ((VertexFlags::LocalMin & vert.flags) != VertexFlags::None) return; vert.flags = (vert.flags | VertexFlags::LocalMin); - minima_list_.push_back(new LocalMinima(&vert, polytype, is_open)); + minima_list_.emplace_back(new LocalMinima(&vert, polytype, is_open)); } bool ClipperBase::IsContributingClosed(const Active & e) const @@ -1270,7 +1270,7 @@ namespace Clipper2Lib { { OutRec* outrec = new OutRec(); outrec->idx = (unsigned)outrec_list_.size(); - outrec_list_.push_back(outrec); + outrec_list_.emplace_back(outrec); outrec->pts = nullptr; outrec->polypath = nullptr; e1.outrec = outrec; @@ -1544,7 +1544,7 @@ namespace Clipper2Lib { { OutRec* newOutRec = new OutRec(); newOutRec->idx = outrec_list_.size(); - outrec_list_.push_back(newOutRec); + outrec_list_.emplace_back(newOutRec); newOutRec->owner = prevOp->outrec->owner; newOutRec->polypath = nullptr; splitOp->outrec = newOutRec; @@ -1642,13 +1642,13 @@ namespace Clipper2Lib { { OutRec* newOr = new OutRec(); newOr->idx = outrec_list_.size(); - outrec_list_.push_back(newOr); + outrec_list_.emplace_back(newOr); newOr->polypath = nullptr; if (using_polytree_) { if (!outrec.splits) outrec.splits = new OutRecList(); - outrec.splits->push_back(newOr); + outrec.splits->emplace_back(newOr); } if (std::abs(area1) >= std::abs(area2)) @@ -1677,7 +1677,7 @@ namespace Clipper2Lib { { OutRec* outrec = new OutRec(); outrec->idx = outrec_list_.size(); - outrec_list_.push_back(outrec); + outrec_list_.emplace_back(outrec); outrec->owner = nullptr; outrec->is_open = true; outrec->pts = nullptr; @@ -2147,7 +2147,7 @@ namespace Clipper2Lib { pt.x = e2.curr_x; } - intersect_nodes_.push_back(IntersectNode(&e1, &e2, pt)); + intersect_nodes_.emplace_back(IntersectNode(&e1, &e2, pt)); } @@ -2929,7 +2929,7 @@ namespace Clipper2Lib { Joiner* j = new Joiner(op1, op2, nullptr); j->idx = static_cast(joiner_list_.size()); - joiner_list_.push_back(j); + joiner_list_.emplace_back(j); } @@ -3315,14 +3315,14 @@ namespace Clipper2Lib { lastPt = op->pt; op2 = op->next; } - path.push_back(lastPt); + path.emplace_back(lastPt); while (op2 != op) { if (op2->pt != lastPt) { lastPt = op2->pt; - path.push_back(lastPt); + path.emplace_back(lastPt); } if (reverse) op2 = op2->prev; @@ -3451,7 +3451,7 @@ namespace Clipper2Lib { { Path64 path; if (BuildPath(outrec->pts, ReverseSolution, true, path)) - open_paths.push_back(path); + open_paths.emplace_back(path); continue; } diff --git a/CPP/Clipper2Lib/clipper.engine.h b/CPP/Clipper2Lib/clipper.engine.h index bbada45d..d6f4be49 100644 --- a/CPP/Clipper2Lib/clipper.engine.h +++ b/CPP/Clipper2Lib/clipper.engine.h @@ -311,7 +311,7 @@ namespace Clipper2Lib { PolyPath* AddChild(const Path& path) { - childs_.push_back(new PolyPath(this, path)); + childs_.emplace_back(new PolyPath(this, path)); return childs_.back(); } diff --git a/CPP/Clipper2Lib/clipper.h b/CPP/Clipper2Lib/clipper.h index 66c2b397..daa6ec49 100644 --- a/CPP/Clipper2Lib/clipper.h +++ b/CPP/Clipper2Lib/clipper.h @@ -158,7 +158,7 @@ namespace Clipper2Lib Path64 result; result.reserve(path.size()); for (const Point64& pt : path) - result.push_back(Point64(pt.x + dx, pt.y + dy)); + result.emplace_back(Point64(pt.x + dx, pt.y + dy)); return result; } @@ -167,7 +167,7 @@ namespace Clipper2Lib PathD result; result.reserve(path.size()); for (const PointD& pt : path) - result.push_back(PointD(pt.x + dx, pt.y + dy)); + result.emplace_back(PointD(pt.x + dx, pt.y + dy)); return result; } @@ -176,7 +176,7 @@ namespace Clipper2Lib Paths64 result; result.reserve(paths.size()); for (const Path64& path : paths) - result.push_back(TranslatePath(path, dx, dy)); + result.emplace_back(TranslatePath(path, dx, dy)); return result; } @@ -185,7 +185,7 @@ namespace Clipper2Lib PathsD result; result.reserve(paths.size()); for (const PathD& path : paths) - result.push_back(TranslatePath(path, dx, dy)); + result.emplace_back(TranslatePath(path, dx, dy)); return result; } @@ -253,7 +253,7 @@ namespace Clipper2Lib template inline void InternalPolyNodeToPaths(const PolyPath& polypath, Paths& paths) { - paths.push_back(polypath.Polygon()); + paths.emplace_back(polypath.Polygon()); for (auto child : polypath) InternalPolyNodeToPaths(*child, paths); } @@ -394,7 +394,7 @@ namespace Clipper2Lib if (!details::GetInt(s_iter, s.cend(), x)) break; details::SkipSpacesWithOptionalComma(s_iter, s.cend()); if (!details::GetInt(s_iter, s.cend(), y)) break; - result.push_back(Point64(x, y)); + result.emplace_back(Point64(x, y)); if (user_defined_skip) details::SkipUserDefinedChars(s_iter, s.cend(), skip_chars); else @@ -414,7 +414,7 @@ namespace Clipper2Lib if (!details::GetFloat(s_iter, s.cend(), x)) break; details::SkipSpacesWithOptionalComma(s_iter, s.cend()); if (!details::GetFloat(s_iter, s.cend(), y)) break; - result.push_back(PointD(x, y)); + result.emplace_back(PointD(x, y)); details::SkipSpacesWithOptionalComma(s_iter, s.cend()); } return result; @@ -443,20 +443,20 @@ namespace Clipper2Lib } prevIt = srcIt++; - dst.push_back(*prevIt); + dst.emplace_back(*prevIt); for (; srcIt != stop; ++srcIt) { if (CrossProduct(*prevIt, *srcIt, *(srcIt + 1))) { prevIt = srcIt; - dst.push_back(*prevIt); + dst.emplace_back(*prevIt); } } if (is_open_path) - dst.push_back(*srcIt); + dst.emplace_back(*srcIt); else if (CrossProduct(*prevIt, *stop, dst[0])) - dst.push_back(*stop); + dst.emplace_back(*stop); else { while (dst.size() > 2 && @@ -526,10 +526,10 @@ namespace Clipper2Lib double dx = co, dy = si; Path result; result.reserve(steps); - result.push_back(Point(center.x + radiusX, static_cast(center.y))); + result.emplace_back(Point(center.x + radiusX, static_cast(center.y))); for (int i = 1; i < steps; ++i) { - result.push_back(Point(center.x + radiusX * dx, center.y + radiusY * dy)); + result.emplace_back(Point(center.x + radiusX * dx, center.y + radiusY * dy)); double x = dx * co - dy * si; dy = dy * co + dx * si; dx = x; @@ -583,7 +583,7 @@ namespace Clipper2Lib result.reserve(len); for (typename Path::size_type i = 0; i < len; ++i) if (flags[i]) - result.push_back(path[i]); + result.emplace_back(path[i]); return result; } @@ -593,7 +593,7 @@ namespace Clipper2Lib Paths result; result.reserve(paths.size()); for (const Path& path : paths) - result.push_back(RamerDouglasPeucker(path, epsilon)); + result.emplace_back(RamerDouglasPeucker(path, epsilon)); return result; } diff --git a/CPP/Clipper2Lib/clipper.minkowski.h b/CPP/Clipper2Lib/clipper.minkowski.h index 99a586b1..78e558fe 100644 --- a/CPP/Clipper2Lib/clipper.minkowski.h +++ b/CPP/Clipper2Lib/clipper.minkowski.h @@ -36,7 +36,7 @@ namespace Clipper2Lib Path64 path2(pattern.size()); std::transform(pattern.cbegin(), pattern.cend(), path2.begin(), [pt](const Point64& pt2) {return pt + pt2; }); - tmp.push_back(path2); + tmp.emplace_back(path2); } } else @@ -46,7 +46,7 @@ namespace Clipper2Lib Path64 path2(pattern.size()); std::transform(pattern.cbegin(), pattern.cend(), path2.begin(), [pt](const Point64& pt2) {return pt - pt2; }); - tmp.push_back(path2); + tmp.emplace_back(path2); } } @@ -60,14 +60,14 @@ namespace Clipper2Lib Path64 quad; quad.reserve(4); { - quad.push_back(tmp[g][h]); - quad.push_back(tmp[i][h]); - quad.push_back(tmp[i][j]); - quad.push_back(tmp[g][j]); + quad.emplace_back(tmp[g][h]); + quad.emplace_back(tmp[i][h]); + quad.emplace_back(tmp[i][j]); + quad.emplace_back(tmp[g][j]); }; if (!IsPositive(quad)) std::reverse(quad.begin(), quad.end()); - result.push_back(quad); + result.emplace_back(quad); h = j; } g = i; diff --git a/CPP/Clipper2Lib/clipper.offset.cpp b/CPP/Clipper2Lib/clipper.offset.cpp index 97e35bad..d5d239ab 100644 --- a/CPP/Clipper2Lib/clipper.offset.cpp +++ b/CPP/Clipper2Lib/clipper.offset.cpp @@ -86,27 +86,27 @@ inline bool IsClosedPath(EndType et) void ClipperOffset::AddPath(const Path64& path, JoinType jt_, EndType et_) { Paths64 paths; - paths.push_back(path); + paths.emplace_back(path); AddPaths(paths, jt_, et_); } void ClipperOffset::AddPaths(const Paths64 &paths, JoinType jt_, EndType et_) { if (paths.size() == 0) return; - groups_.push_back(PathGroup(paths, jt_, et_)); + groups_.emplace_back(PathGroup(paths, jt_, et_)); } void ClipperOffset::AddPath(const Clipper2Lib::PathD& path, JoinType jt_, EndType et_) { PathsD paths; - paths.push_back(path); + paths.emplace_back(path); AddPaths(paths, jt_, et_); } void ClipperOffset::AddPaths(const PathsD& paths, JoinType jt_, EndType et_) { if (paths.size() == 0) return; - groups_.push_back(PathGroup(PathsDToPaths64(paths), jt_, et_)); + groups_.emplace_back(PathGroup(PathsDToPaths64(paths), jt_, et_)); } void ClipperOffset::BuildNormals(const Path64& path) @@ -116,8 +116,8 @@ void ClipperOffset::BuildNormals(const Path64& path) if (path.size() == 0) return; Path64::const_iterator path_iter, path_last_iter = --path.cend(); for (path_iter = path.cbegin(); path_iter != path_last_iter; ++path_iter) - norms.push_back(GetUnitNormal(*path_iter,*(path_iter +1))); - norms.push_back(GetUnitNormal(*path_last_iter, *(path.cbegin()))); + norms.emplace_back(GetUnitNormal(*path_iter,*(path_iter +1))); + norms.emplace_back(GetUnitNormal(*path_last_iter, *(path.cbegin()))); } inline PointD TranslatePoint(const PointD& pt, double dx, double dy) @@ -185,15 +185,15 @@ void ClipperOffset::DoSquare(PathGroup& group, const Path64& path, size_t j, siz // get the intersection point pt = IntersectPoint(pt1, pt2, pt3, pt4); - group.path_.push_back(Point64(pt)); + group.path_.emplace_back(Point64(pt)); //get the second intersect point through reflecion - group.path_.push_back(Point64(ReflectPoint(pt, ptQ))); + group.path_.emplace_back(Point64(ReflectPoint(pt, ptQ))); } void ClipperOffset::DoMiter(PathGroup& group, const Path64& path, size_t j, size_t k, double cos_a) { double q = delta_ / (cos_a + 1); - group.path_.push_back(Point64( + group.path_.emplace_back(Point64( path[j].x + (norms[k].x + norms[j].x) * q, path[j].y + (norms[k].y + norms[j].y) * q)); } @@ -204,17 +204,17 @@ void ClipperOffset::DoRound(PathGroup& group, const Point64& pt, //even though angle may be negative this is a convex join PointD pt2 = PointD(norm2.x * delta_, norm2.y * delta_); int steps = static_cast(std::round(steps_per_rad_ * std::abs(angle) + 0.501)); - group.path_.push_back(Point64(pt.x + pt2.x, pt.y + pt2.y)); + group.path_.emplace_back(Point64(pt.x + pt2.x, pt.y + pt2.y)); double step_sin = std::sin(angle / steps); double step_cos = std::cos(angle / steps); for (int i = 0; i < steps; i++) { pt2 = PointD(pt2.x * step_cos - step_sin * pt2.y, pt2.x * step_sin + pt2.y * step_cos); - group.path_.push_back(Point64(pt.x + pt2.x, pt.y + pt2.y)); + group.path_.emplace_back(Point64(pt.x + pt2.x, pt.y + pt2.y)); } pt2 = PointD(norm1.x * delta_, norm1.y * delta_); - group.path_.push_back(Point64(pt.x + pt2.x, pt.y + pt2.y)); + group.path_.emplace_back(Point64(pt.x + pt2.x, pt.y + pt2.y)); } void ClipperOffset::OffsetPoint(PathGroup& group, Path64& path, size_t j, size_t& k) @@ -236,11 +236,11 @@ void ClipperOffset::OffsetPoint(PathGroup& group, Path64& path, size_t j, size_t Point64 p2 = Point64( path[j].x + norms[j].x * delta_, path[j].y + norms[j].y * delta_); - group.path_.push_back(p1); + group.path_.emplace_back(p1); if (p1 != p2) { - group.path_.push_back(path[j]); // this aids with clipping removal later - group.path_.push_back(p2); + group.path_.emplace_back(path[j]); // this aids with clipping removal later + group.path_.emplace_back(p2); } } else @@ -272,7 +272,7 @@ void ClipperOffset::OffsetPolygon(PathGroup& group, Path64& path) group.path_.clear(); for (Path64::size_type i = 0, j = path.size() -1; i < path.size(); j = i, ++i) OffsetPoint(group, path, i, j); - group.paths_out_.push_back(group.path_); + group.paths_out_.emplace_back(group.path_); } void ClipperOffset::OffsetOpenJoined(PathGroup& group, Path64& path) @@ -294,10 +294,10 @@ void ClipperOffset::OffsetOpenPath(PathGroup& group, Path64& path, EndType end_t switch (end_type) { case EndType::Butt: - group.path_.push_back(Point64( + group.path_.emplace_back(Point64( path[j].x + norms[k].x * delta_, path[j].y + norms[k].y * delta_)); - group.path_.push_back(Point64( + group.path_.emplace_back(Point64( path[j].x - norms[k].x * delta_, path[j].y - norms[k].y * delta_)); break; @@ -321,10 +321,10 @@ void ClipperOffset::OffsetOpenPath(PathGroup& group, Path64& path, EndType end_t switch (end_type) { case EndType::Butt: - group.path_.push_back(Point64( + group.path_.emplace_back(Point64( path[0].x + norms[1].x * delta_, path[0].y + norms[1].y * delta_)); - group.path_.push_back(Point64( + group.path_.emplace_back(Point64( path[0].x - norms[1].x * delta_, path[0].y - norms[1].y * delta_)); break; @@ -336,7 +336,7 @@ void ClipperOffset::OffsetOpenPath(PathGroup& group, Path64& path, EndType end_t break; } - group.paths_out_.push_back(group.path_); + group.paths_out_.emplace_back(group.path_); } void ClipperOffset::DoGroupOffset(PathGroup& group, double delta) @@ -392,12 +392,12 @@ void ClipperOffset::DoGroupOffset(PathGroup& group, double delta) else { group.path_.reserve(4); - group.path_.push_back(Point64(path[0].x - delta_, path[0].y - delta_)); - group.path_.push_back(Point64(path[0].x + delta_, path[0].y - delta_)); - group.path_.push_back(Point64(path[0].x + delta_, path[0].y + delta_)); - group.path_.push_back(Point64(path[0].x - delta_, path[0].y + delta_)); + group.path_.emplace_back(Point64(path[0].x - delta_, path[0].y - delta_)); + group.path_.emplace_back(Point64(path[0].x + delta_, path[0].y - delta_)); + group.path_.emplace_back(Point64(path[0].x + delta_, path[0].y + delta_)); + group.path_.emplace_back(Point64(path[0].x - delta_, path[0].y + delta_)); } - group.paths_out_.push_back(group.path_); + group.paths_out_.emplace_back(group.path_); } else {