summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Bauer <mail@ulrich-bauer.org>2020-12-31 18:23:48 +0100
committerUlrich Bauer <mail@ulrich-bauer.org>2020-12-31 18:23:48 +0100
commit51fd953d653762f1825003cfa2dcae31e5360ab2 (patch)
tree7091164b13fdce0159a898b27573011b76e6b9f9
parent9b7f0a3803ed59a3e804011d6bae2c407c1758cd (diff)
undo performance-degrading change
-rw-r--r--ripser.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/ripser.cpp b/ripser.cpp
index b377d49..2deb58a 100644
--- a/ripser.cpp
+++ b/ripser.cpp
@@ -265,6 +265,9 @@ struct sparse_distance_matrix {
index_t num_edges;
+ mutable std::vector<std::vector<index_diameter_t>::const_reverse_iterator> neighbor_it;
+ mutable std::vector<std::vector<index_diameter_t>::const_reverse_iterator> neighbor_end;
+
sparse_distance_matrix(std::vector<std::vector<index_diameter_t>>&& _neighbors,
index_t _num_edges)
: neighbors(std::move(_neighbors)), num_edges(_num_edges) {}
@@ -778,8 +781,8 @@ template <> class ripser<sparse_distance_matrix>::simplex_coboundary_enumerator
const coefficient_t modulus;
const sparse_distance_matrix& dist;
const binomial_coeff_table& binomial_coeff;
- std::vector<std::vector<index_diameter_t>::const_reverse_iterator> neighbor_it;
- std::vector<std::vector<index_diameter_t>::const_reverse_iterator> neighbor_end;
+ std::vector<std::vector<index_diameter_t>::const_reverse_iterator>& neighbor_it;
+ std::vector<std::vector<index_diameter_t>::const_reverse_iterator>& neighbor_end;
index_diameter_t neighbor;
public:
@@ -787,7 +790,10 @@ public:
const ripser& _parent)
: idx_below(get_index(_simplex)), idx_above(0), k(_dim + 1), vertices(_dim + 1),
simplex(_simplex), modulus(_parent.modulus), dist(_parent.dist),
- binomial_coeff(_parent.binomial_coeff) {
+ binomial_coeff(_parent.binomial_coeff), neighbor_it(dist.neighbor_it),
+ neighbor_end(dist.neighbor_end) {
+ neighbor_it.clear();
+ neighbor_end.clear();
_parent.get_simplex_vertices(idx_below, _dim, _parent.n, vertices.rbegin());
for (auto v : vertices) {