summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2022-02-18 20:58:51 +0100
committerMarc Glisse <marc.glisse@inria.fr>2022-02-18 21:51:54 +0100
commit2e4873e572f0ccec27fe3071c0aafe6f841cc465 (patch)
tree831727dcd62b434465f255dca3f178a561c44c2e
parent0748c7b50d48849bd086e0c70a165402d597c81c (diff)
No if constexpr yet
-rw-r--r--src/Collapse/include/gudhi/Flag_complex_edge_collapser.h9
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));