summaryrefslogtreecommitdiff
path: root/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_iterators.h
diff options
context:
space:
mode:
authorVincent Rouvreau <vincent.rouvreau@inria.fr>2022-04-12 17:03:58 +0200
committerVincent Rouvreau <vincent.rouvreau@inria.fr>2022-04-12 17:03:58 +0200
commita6393ee6200010f69514875b953936b38e9eaa7f (patch)
tree72ebaecd21d20b655b0bc39a5e56f07670c35928 /src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_iterators.h
parentbcb69fe23195a4073c3b05f6df58d3ceeef0b7f0 (diff)
code review: Add short cut for contiguous vertices increment
Diffstat (limited to 'src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_iterators.h')
-rw-r--r--src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_iterators.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_iterators.h b/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_iterators.h
index e4b54c7e..3fd2e07c 100644
--- a/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_iterators.h
+++ b/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_iterators.h
@@ -251,6 +251,21 @@ class Simplex_tree_boundary_opposite_vertex_simplex_iterator : public boost::ite
Siblings * for_sib = sib_;
Siblings * new_sib = sib_->oncles();
auto rit = suffix_.rbegin();
+ if (SimplexTree::Options::contiguous_vertices && new_sib == nullptr) {
+ // We reached the root, use a short-cut to find a vertex.
+ if (rit == suffix_.rend()) {
+ baov_.second = baov_.first->first;
+ // Segment, this vertex is the last boundary simplex
+ baov_.first = for_sib->members_.begin()+last_;
+ sib_ = nullptr;
+ return;
+ } else {
+ // Dim >= 2, initial step of the descent
+ baov_.first = for_sib->members_.begin()+*rit;
+ for_sib = baov_.first->second.children();
+ ++rit;
+ }
+ }
for (; rit != suffix_.rend(); ++rit) {
baov_.first = for_sib->find(*rit);
for_sib = baov_.first->second.children();