diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2022-02-18 20:58:51 +0100 |
---|---|---|
committer | Marc Glisse <marc.glisse@inria.fr> | 2022-02-18 21:51:54 +0100 |
commit | 2e4873e572f0ccec27fe3071c0aafe6f841cc465 (patch) | |
tree | 831727dcd62b434465f255dca3f178a561c44c2e | |
parent | 0748c7b50d48849bd086e0c70a165402d597c81c (diff) |
No if constexpr yet
-rw-r--r-- | src/Collapse/include/gudhi/Flag_complex_edge_collapser.h | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/Collapse/include/gudhi/Flag_complex_edge_collapser.h b/src/Collapse/include/gudhi/Flag_complex_edge_collapser.h index 63f747bf..63e65f5e 100644 --- a/src/Collapse/include/gudhi/Flag_complex_edge_collapser.h +++ b/src/Collapse/include/gudhi/Flag_complex_edge_collapser.h @@ -279,6 +279,9 @@ end_move: }; +template<class R> R to_range(R&& r) { return std::move(r); } +template<class R, class T> R to_range(T&& t) { R r; r.insert(r.end(), t.begin(), t.end()); return r; } + template<class FilteredEdgeRange, class Delay> auto flag_complex_collapse_edges(FilteredEdgeRange&& edges, Delay&&delay) { // Would it help to label the points according to some spatial sorting? auto first_edge_itr = std::begin(edges); @@ -286,11 +289,7 @@ template<class FilteredEdgeRange, class Delay> auto flag_complex_collapse_edges( using Filtration_value = std::decay_t<decltype(std::get<2>(*first_edge_itr))>; using Edge_collapser = Flag_complex_edge_collapser<Vertex, Filtration_value>; if (first_edge_itr != std::end(edges)) { - std::vector<typename Edge_collapser::Filtered_edge> edges2; - if(std::is_same<FilteredEdgeRange, std::vector<typename Edge_collapser::Filtered_edge>>::value) - edges2 = std::move(edges); - else - edges2.insert(edges2.end(), edges.begin(), edges.end()); + auto edges2 = to_range<std::vector<typename Edge_collapser::Filtered_edge>>(std::forward<FilteredEdgeRange>(edges)); std::sort(edges2.begin(), edges2.end(), [](auto const&a, auto const&b){return std::get<2>(a)>std::get<2>(b);}); Edge_collapser edge_collapser; edge_collapser.process_edges(edges2, std::forward<Delay>(delay)); |