Use `std::execution::par` in `dbEdgeProcessor` and `dbPolygonTools` sorts

This commit is contained in:
Niko Savola 2026-06-03 10:05:30 +03:00
parent 6270877110
commit b116fe452c
No known key found for this signature in database
2 changed files with 18 additions and 4 deletions

View File

@ -29,6 +29,13 @@
#include "tlProgress.h"
#include "gsi.h"
#if defined(__cpp_lib_execution)
#include <execution>
#define PARALLEL_EXEC_POLICY std::execution::par,
#else
#define PARALLEL_EXEC_POLICY
#endif
#include <vector>
#include <deque>
#include <memory>
@ -2237,7 +2244,7 @@ EdgeProcessor::redo_or_process (const std::vector<std::pair<db::EdgeSink *, db::
} else {
// step 2: find intersections
std::sort (mp_work_edges->begin (), mp_work_edges->end (), edge_ymin_compare<db::Coord> ());
std::sort (PARALLEL_EXEC_POLICY mp_work_edges->begin (), mp_work_edges->end (), edge_ymin_compare<db::Coord> ());
y = edge_ymin ((*mp_work_edges) [0]);
future = mp_work_edges->begin ();
@ -2422,7 +2429,7 @@ EdgeProcessor::redo_or_process (const std::vector<std::pair<db::EdgeSink *, db::
gs.reset ();
gs.reserve (n_props);
std::sort (mp_work_edges->begin (), mp_work_edges->end (), edge_ymin_compare<db::Coord> ());
std::sort (PARALLEL_EXEC_POLICY mp_work_edges->begin (), mp_work_edges->end (), edge_ymin_compare<db::Coord> ());
y = edge_ymin ((*mp_work_edges) [0]);

View File

@ -28,6 +28,13 @@
#include "tlLog.h"
#include "tlInt128Support.h"
#if defined(__cpp_lib_execution)
#include <execution>
#define PARALLEL_EXEC_POLICY std::execution::par,
#else
#define PARALLEL_EXEC_POLICY
#endif
#include <algorithm>
#include <cmath>
#include <limits>
@ -1838,7 +1845,7 @@ rasterize_impl (const db::polygon<C> &polygon, db::area_map<C> &am)
}
// sort edges
std::sort (edges.begin (), edges.end (), db::edge_ymin_compare<C> ());
std::sort (PARALLEL_EXEC_POLICY edges.begin (), edges.end (), db::edge_ymin_compare<C> ());
typename std::vector <edge_type>::iterator c = edges.begin ();
@ -2761,7 +2768,7 @@ decompose_convex_to_trapezoids (const db::SimplePolygon &sp, bool horizontal, db
}
}
std::sort (edges.begin (), edges.end (), db::edge_ymin_compare<db::Coord> ());
std::sort (PARALLEL_EXEC_POLICY edges.begin (), edges.end (), db::edge_ymin_compare<db::Coord> ());
db::Coord y = db::edge_ymin (edges.front ());