Skip to content

Commit 3774796

Browse files
committed
Use emplace_back in extensions
With `emplace_back`, we don't need to create an object ourselves, to be copied into the container, plus it returns a reference to the new object for us to use. This used clang-tidy's `modernize-use-emplace` check, plus some followups to use the return values.
1 parent 379d290 commit 3774796

File tree

3 files changed

+25
-31
lines changed

3 files changed

+25
-31
lines changed

src/_backend_agg_basic_types.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class Dashes
4343
}
4444
void add_dash_pair(double length, double skip)
4545
{
46-
dashes.push_back(std::make_pair(length, skip));
46+
dashes.emplace_back(length, skip);
4747
}
4848
size_t size() const
4949
{

src/_path.h

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -619,11 +619,11 @@ inline void clip_to_rect_one_step(const Polygon &polygon, Polygon &result, const
619619
if (sinside ^ pinside) {
620620
double bx, by;
621621
filter.bisect(sx, sy, px, py, &bx, &by);
622-
result.push_back(XY(bx, by));
622+
result.emplace_back(bx, by);
623623
}
624624

625625
if (pinside) {
626-
result.push_back(XY(px, py));
626+
result.emplace_back(px, py);
627627
}
628628

629629
sx = px;
@@ -670,7 +670,7 @@ clip_path_to_rect(PathIterator &path, agg::rect_d &rect, bool inside, std::vecto
670670
polygon1.clear();
671671
do {
672672
if (code == agg::path_cmd_move_to) {
673-
polygon1.push_back(XY(x, y));
673+
polygon1.emplace_back(x, y);
674674
}
675675

676676
code = curve.vertex(&x, &y);
@@ -680,7 +680,7 @@ clip_path_to_rect(PathIterator &path, agg::rect_d &rect, bool inside, std::vecto
680680
}
681681

682682
if (code != agg::path_cmd_move_to) {
683-
polygon1.push_back(XY(x, y));
683+
polygon1.emplace_back(x, y);
684684
}
685685
} while ((code & agg::path_cmd_end_poly) != agg::path_cmd_end_poly);
686686

@@ -976,23 +976,20 @@ void convert_path_to_polygons(PathIterator &path,
976976
simplify_t simplified(clipped, simplify, path.simplify_threshold());
977977
curve_t curve(simplified);
978978

979-
result.push_back(Polygon());
980-
Polygon *polygon = &result.back();
979+
Polygon& polygon = result.emplace_back();
981980
double x, y;
982981
unsigned code;
983982

984983
while ((code = curve.vertex(&x, &y)) != agg::path_cmd_stop) {
985984
if ((code & agg::path_cmd_end_poly) == agg::path_cmd_end_poly) {
986985
_finalize_polygon(result, 1);
987-
result.push_back(Polygon());
988-
polygon = &result.back();
986+
polygon = result.emplace_back();
989987
} else {
990988
if (code == agg::path_cmd_move_to) {
991989
_finalize_polygon(result, closed_only);
992-
result.push_back(Polygon());
993-
polygon = &result.back();
990+
polygon = result.emplace_back();
994991
}
995-
polygon->push_back(XY(x, y));
992+
polygon.emplace_back(x, y);
996993
}
997994
}
998995

src/tri/_tri.cpp

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -269,11 +269,11 @@ void Triangulation::calculate_boundaries()
269269
auto it = boundary_edges.cbegin();
270270
int tri = it->tri;
271271
int edge = it->edge;
272-
_boundaries.push_back(Boundary());
272+
_boundaries.emplace_back();
273273
Boundary& boundary = _boundaries.back();
274274

275275
while (true) {
276-
boundary.push_back(TriEdge(tri, edge));
276+
boundary.emplace_back(tri, edge);
277277
boundary_edges.erase(it);
278278
_tri_edge_to_boundary_map[TriEdge(tri, edge)] =
279279
BoundaryEdge(_boundaries.size()-1, boundary.size()-1);
@@ -624,7 +624,7 @@ void TriContourGenerator::clear_visited_flags(bool include_boundaries)
624624
// Initialise _boundaries_visited.
625625
_boundaries_visited.reserve(boundaries.size());
626626
for (const auto & boundary : boundaries) {
627-
_boundaries_visited.push_back(BoundaryVisited(boundary.size()));
627+
_boundaries_visited.emplace_back(boundary.size());
628628
}
629629

630630
// Initialise _boundaries_used.
@@ -796,8 +796,7 @@ void TriContourGenerator::find_boundary_lines(Contour& contour,
796796
if (startAbove && !endAbove) {
797797
// This boundary edge is the start point for a contour line,
798798
// so follow the line.
799-
contour.push_back(ContourLine());
800-
ContourLine& contour_line = contour.back();
799+
ContourLine& contour_line = contour.emplace_back();
801800
TriEdge tri_edge = *itb;
802801
follow_interior(contour_line, tri_edge, true, level, false);
803802
}
@@ -830,8 +829,7 @@ void TriContourGenerator::find_boundary_lines_filled(Contour& contour,
830829

831830
if (decr_lower || incr_upper) {
832831
// Start point for contour line, so follow it.
833-
contour.push_back(ContourLine());
834-
ContourLine& contour_line = contour.back();
832+
ContourLine& contour_line = contour.emplace_back();
835833
TriEdge start_tri_edge = boundary[j];
836834
TriEdge tri_edge = start_tri_edge;
837835

@@ -859,8 +857,7 @@ void TriContourGenerator::find_boundary_lines_filled(Contour& contour,
859857
const Boundary& boundary = boundaries[i];
860858
double z = get_z(triang.get_triangle_point(boundary[0]));
861859
if (z >= lower_level && z < upper_level) {
862-
contour.push_back(ContourLine());
863-
ContourLine& contour_line = contour.back();
860+
ContourLine& contour_line = contour.emplace_back();
864861
for (auto edge : boundary) {
865862
contour_line.push_back(triang.get_point_coords(
866863
triang.get_triangle_point(edge)));
@@ -895,8 +892,7 @@ void TriContourGenerator::find_interior_lines(Contour& contour,
895892
continue; // Contour does not pass through this triangle.
896893

897894
// Found start of new contour line loop.
898-
contour.push_back(ContourLine());
899-
ContourLine& contour_line = contour.back();
895+
ContourLine& contour_line = contour.emplace_back();
900896
TriEdge tri_edge = triang.get_neighbor_edge(tri, edge);
901897
follow_interior(contour_line, tri_edge, false, level, on_upper);
902898

@@ -1435,10 +1431,10 @@ TrapezoidMapTriFinder::initialize()
14351431

14361432
// Set up edges array.
14371433
// First the bottom and top edges of the enclosing rectangle.
1438-
_edges.push_back(Edge(&_points[npoints], &_points[npoints+1], -1, -1,
1439-
nullptr, nullptr));
1440-
_edges.push_back(Edge(&_points[npoints+2], &_points[npoints+3], -1, -1,
1441-
nullptr, nullptr));
1434+
_edges.emplace_back(&_points[npoints], &_points[npoints+1], -1, -1,
1435+
nullptr, nullptr);
1436+
_edges.emplace_back(&_points[npoints+2], &_points[npoints+3], -1, -1,
1437+
nullptr, nullptr);
14421438

14431439
// Add all edges in the triangulation that point to the right. Do not
14441440
// explicitly include edges that point to the left as the neighboring
@@ -1457,11 +1453,12 @@ TrapezoidMapTriFinder::initialize()
14571453
const Point* neighbor_point_below = (neighbor.tri == -1) ?
14581454
nullptr : _points + triang.get_triangle_point(
14591455
neighbor.tri, (neighbor.edge+2)%3);
1460-
_edges.push_back(Edge(start, end, neighbor.tri, tri,
1461-
neighbor_point_below, other));
1456+
_edges.emplace_back(start, end, neighbor.tri, tri,
1457+
neighbor_point_below, other);
1458+
}
1459+
else if (neighbor.tri == -1) {
1460+
_edges.emplace_back(end, start, tri, -1, other, nullptr);
14621461
}
1463-
else if (neighbor.tri == -1)
1464-
_edges.push_back(Edge(end, start, tri, -1, other, nullptr));
14651462

14661463
// Set triangle associated with start point if not already set.
14671464
if (start->tri == -1)

0 commit comments

Comments
 (0)