diff --git a/src/db/db/dbPLCConvexDecomposition.cc b/src/db/db/dbPLCConvexDecomposition.cc index 95633fb3a..ca7f611dc 100644 --- a/src/db/db/dbPLCConvexDecomposition.cc +++ b/src/db/db/dbPLCConvexDecomposition.cc @@ -30,6 +30,19 @@ #include #include #include +#include + +#if __cplusplus >= 201703L + #if __has_include() + #include + #endif +#endif + +#if defined(__cpp_lib_execution) +#define PARALLEL_EXEC_POLICY std::execution::par, +#else +#define PARALLEL_EXEC_POLICY +#endif // #define DEBUG_DUMP_ESSENTIAL_EDGES @@ -269,7 +282,7 @@ ConvexDecomposition::hertel_mehlhorn_decomposition (Triangulation &tris, const C if (! new_points.empty ()) { - std::sort (new_points.begin (), new_points.end (), less_compare_func ()); + std::sort (PARALLEL_EXEC_POLICY new_points.begin (), new_points.end (), less_compare_func ()); new_points.erase (std::unique (new_points.begin (), new_points.end (), equal_compare_func ()), new_points.end ()); // Insert the new points and make connections @@ -332,7 +345,7 @@ ConvexDecomposition::hertel_mehlhorn_decomposition (Triangulation &tris, const C } } - std::sort (sorted_edges.begin (), sorted_edges.end (), SortAngleAndEdgesByEdgeLength ()); + std::sort (PARALLEL_EXEC_POLICY sorted_edges.begin (), sorted_edges.end (), SortAngleAndEdgesByEdgeLength ()); for (auto i = sorted_edges.end (); i != sorted_edges.begin (); ) { --i; diff --git a/src/db/db/dbShapes.cc b/src/db/db/dbShapes.cc index 8176df950..deb9fe916 100644 --- a/src/db/db/dbShapes.cc +++ b/src/db/db/dbShapes.cc @@ -30,6 +30,19 @@ #include "dbLayout.h" #include +#include + +#if __cplusplus >= 201703L + #if __has_include() + #include + #endif +#endif + +#if defined(__cpp_lib_execution) +#define PARALLEL_EXEC_POLICY std::execution::par, +#else +#define PARALLEL_EXEC_POLICY +#endif namespace db { @@ -111,7 +124,7 @@ layer_op::erase (Shapes *shapes) std::vector done; done.resize (m_shapes.size (), false); - std::sort (m_shapes.begin (), m_shapes.end ()); + std::sort (PARALLEL_EXEC_POLICY m_shapes.begin (), m_shapes.end ()); typename std::vector::const_iterator s_begin = m_shapes.begin (); typename std::vector::const_iterator s_end = m_shapes.end ();