summaryrefslogtreecommitdiff
path: root/src/Collapse
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2020-06-17 19:22:20 +0200
committerMarc Glisse <marc.glisse@inria.fr>2020-06-17 19:22:20 +0200
commit2977b097971c4bf314cf0595171c86bce81476b8 (patch)
tree99495a2b994ba9997785b9ed8714ccb87ed35e9c /src/Collapse
parent5e6b64501b27aec000ecd1c495e35aaa6eb92cda (diff)
Expand the matrix dynamically when inserting new vertices
Diffstat (limited to 'src/Collapse')
-rw-r--r--src/Collapse/include/gudhi/Flag_complex_sparse_matrix.h20
1 files changed, 4 insertions, 16 deletions
diff --git a/src/Collapse/include/gudhi/Flag_complex_sparse_matrix.h b/src/Collapse/include/gudhi/Flag_complex_sparse_matrix.h
index 2b939285..c281b2ed 100644
--- a/src/Collapse/include/gudhi/Flag_complex_sparse_matrix.h
+++ b/src/Collapse/include/gudhi/Flag_complex_sparse_matrix.h
@@ -250,6 +250,8 @@ class Flag_complex_sparse_matrix {
auto result = vertex_to_row_.emplace(vertex, n);
// If it was not already inserted - Value won't be updated by emplace if it is already present
if (result.second) {
+ // Expand the matrix. The size of rows is irrelevant.
+ sparse_row_adjacency_matrix_.emplace_back((std::numeric_limits<Eigen::Index>::max)());
// Initializing the diagonal element of the adjency matrix corresponding to rw_b.
sparse_row_adjacency_matrix_[n].insert(n) = -1; // not an edge
// Must be done after reading its size()
@@ -291,19 +293,7 @@ class Flag_complex_sparse_matrix {
*/
template<typename Filtered_edge_range>
Flag_complex_sparse_matrix(const Filtered_edge_range& filtered_edge_range)
- : f_edge_vector_(filtered_edge_range.begin(), filtered_edge_range.end()) {
- // To get the number of vertices
- std::unordered_set<Vertex_handle> vertices;
- for (Filtered_edge filtered_edge : filtered_edge_range) {
- Vertex_handle u;
- Vertex_handle v;
- std::tie(u,v) = std::get<0>(filtered_edge);
- vertices.emplace(u);
- vertices.emplace(v);
- }
- // Initializing sparse_row_adjacency_matrix_, This is a row-major sparse matrix.
- sparse_row_adjacency_matrix_.resize(vertices.size(), Sparse_vector(vertices.size()));
- }
+ : f_edge_vector_(filtered_edge_range.begin(), filtered_edge_range.end()) { }
/** \brief Flag_complex_sparse_matrix constructor from a proximity graph, cf. `Gudhi::compute_proximity_graph`.
*
@@ -312,9 +302,7 @@ class Flag_complex_sparse_matrix {
*
* The constructor is computing and filling a vector of `Flag_complex_sparse_matrix::Filtered_edge`
*/
- Flag_complex_sparse_matrix(const Proximity_graph& one_skeleton_graph)
- : sparse_row_adjacency_matrix_(boost::num_vertices(one_skeleton_graph),
- Sparse_vector(boost::num_vertices(one_skeleton_graph))) {
+ Flag_complex_sparse_matrix(const Proximity_graph& one_skeleton_graph) {
// Insert all edges
for (auto edge_it = boost::edges(one_skeleton_graph);
edge_it.first != edge_it.second; ++edge_it.first) {