summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Simplex_tree/include/gudhi/Simplex_tree.h21
1 files changed, 10 insertions, 11 deletions
diff --git a/src/Simplex_tree/include/gudhi/Simplex_tree.h b/src/Simplex_tree/include/gudhi/Simplex_tree.h
index 1a6a72a3..92add101 100644
--- a/src/Simplex_tree/include/gudhi/Simplex_tree.h
+++ b/src/Simplex_tree/include/gudhi/Simplex_tree.h
@@ -530,31 +530,30 @@ class Simplex_tree {
Simplex_handle find_simplex(const std::vector<Vertex_handle> & simplex) {
Siblings * tmp_sib = &root_;
Dictionary_it tmp_dit;
- Vertex_handle last = simplex.back();
auto vi = simplex.begin();
if (Options::contiguous_vertices) {
+ // Equivalent to the first iteration of the normal loop
GUDHI_CHECK(contiguous_vertices(), "non-contiguous vertices");
Vertex_handle v = *vi++;
if(v < 0 || v >= static_cast<Vertex_handle>(root_.members_.size()))
return null_simplex();
tmp_dit = root_.members_.begin() + v;
- if (!has_children(tmp_dit) && v != last) {
+ if (vi == simplex.end())
+ return tmp_dit;
+ if (!has_children(tmp_dit))
return null_simplex();
- }
tmp_sib = tmp_dit->second.children();
}
- for (; vi != simplex.end(); ++vi) {
- Vertex_handle v = *vi;
- tmp_dit = tmp_sib->members_.find(v);
- if (tmp_dit == tmp_sib->members_.end()) {
+ for (;;) {
+ tmp_dit = tmp_sib->members_.find(*vi++);
+ if (tmp_dit == tmp_sib->members_.end())
return null_simplex();
- }
- if (!has_children(tmp_dit) && v != last) {
+ if (vi == simplex.end())
+ return tmp_dit;
+ if (!has_children(tmp_dit))
return null_simplex();
- }
tmp_sib = tmp_dit->second.children();
}
- return tmp_dit;
}
/** \brief Returns the Simplex_handle corresponding to the 0-simplex