summaryrefslogtreecommitdiff
path: root/src/Collapse/include/gudhi
diff options
context:
space:
mode:
authorROUVREAU Vincent <vincent.rouvreau@inria.fr>2020-06-26 12:08:32 +0200
committerROUVREAU Vincent <vincent.rouvreau@inria.fr>2020-06-26 12:08:32 +0200
commit945c7a6ccd23abd0c854777eebda762dea450490 (patch)
tree7e0e6da90a940db8234a43c3014e9686b541fe08 /src/Collapse/include/gudhi
parenta1ffdb169b1c24d27e184ce7d0c405267b066d9c (diff)
Free function, doc and basic example
Diffstat (limited to 'src/Collapse/include/gudhi')
-rw-r--r--src/Collapse/include/gudhi/Flag_complex_edge_collapser.h40
1 files changed, 33 insertions, 7 deletions
diff --git a/src/Collapse/include/gudhi/Flag_complex_edge_collapser.h b/src/Collapse/include/gudhi/Flag_complex_edge_collapser.h
index 9cd57d7e..981ec88d 100644
--- a/src/Collapse/include/gudhi/Flag_complex_edge_collapser.h
+++ b/src/Collapse/include/gudhi/Flag_complex_edge_collapser.h
@@ -12,11 +12,9 @@
#ifndef FLAG_COMPLEX_EDGE_COLLAPSER_H_
#define FLAG_COMPLEX_EDGE_COLLAPSER_H_
-#include <gudhi/graph_simplicial_complex.h>
#include <gudhi/Debug_utils.h>
#include <boost/functional/hash.hpp>
-#include <boost/graph/adjacency_list.hpp>
#include <boost/iterator/iterator_facade.hpp>
#include <Eigen/Sparse>
@@ -39,12 +37,11 @@ namespace Gudhi {
namespace collapse {
-/**
+/** \private
+ *
* \class Flag_complex_edge_collapser
* \brief Flag complex sparse matrix data structure.
*
- * \ingroup collapse
- *
* \details
* This class stores a <a target="_blank" href="https://en.wikipedia.org/wiki/Clique_complex">Flag complex</a>
* in an <a target="_blank" href="https://eigen.tuxfamily.org/dox/group__TutorialSparse.html">Eigen sparse matrix</a>.
@@ -296,7 +293,7 @@ class Flag_complex_edge_collapser {
* `Flag_complex_edge_collapser::Filtered_edge`.
*/
template<typename FilteredEdgeRange>
- Flag_complex_edge_collapser(FilteredEdgeRange edges)
+ Flag_complex_edge_collapser(const FilteredEdgeRange& edges)
: f_edge_vector_(std::begin(edges), std::end(edges)) { }
/** \brief Performs edge collapse in a increasing sequence of the filtration value.
@@ -310,7 +307,7 @@ class Flag_complex_edge_collapser {
// Sort edges
auto sort_by_filtration = [](const Filtered_edge& edge_a, const Filtered_edge& edge_b) -> bool
{
- return (get<2>(edge_a) < get<2>(edge_b));
+ return (std::get<2>(edge_a) < std::get<2>(edge_b));
};
#ifdef GUDHI_USE_TBB
@@ -342,6 +339,35 @@ class Flag_complex_edge_collapser {
};
+/** \brief Constructs a Flag complex from edges as an input, collapse edges and returns remaining edges.
+ *
+ * \fn auto Gudhi::collapse::flag_complex_collapse_edges(FilteredEdgeRange const& edges)
+ *
+ * \tparam FilteredEdgeRange furnishes `std::begin` and `std::end` methods and returns an iterator on a
+ * FilteredEdge of type `std::tuple<Vertex_handle, Vertex_handle, Filtration_value>`
+ *
+ * \ingroup edge_collapse
+ *
+ */
+template<class FilteredEdgeRange> auto flag_complex_collapse_edges(const FilteredEdgeRange& edges) {
+ auto first_edge_itr = std::begin(edges);
+ auto first_vertex = std::get<0>(*first_edge_itr);
+ auto first_filt = std::get<2>(*first_edge_itr);
+ using Vertex_handle = decltype(first_vertex);
+ using Filtration_value = decltype(first_filt);
+ using Edge_collapser = Flag_complex_edge_collapser<Vertex_handle, Filtration_value>;
+ std::vector<typename Edge_collapser::Filtered_edge> remaining_edges;
+ if (first_edge_itr != std::end(edges)) {
+ Edge_collapser edge_collapser(edges);
+ edge_collapser.process_edges(
+ [&remaining_edges](Vertex_handle u, Vertex_handle v, Filtration_value filtration) {
+ // insert the edge
+ remaining_edges.emplace_back(u, v, filtration);
+ });
+ }
+ return remaining_edges;
+}
+
} // namespace collapse
} // namespace Gudhi