diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Witness_complex/include/gudhi/Active_witness/Active_witness.h | 6 | ||||
-rw-r--r-- | src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h | 33 |
2 files changed, 24 insertions, 15 deletions
diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index c3edc0b7..4c8ded61 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -46,13 +46,13 @@ public: Table nearest_landmark_table_; INS_range search_range_; - INS_iterator iterator_last_; + INS_iterator iterator_next_; INS_iterator iterator_end_; Active_witness(INS_range search_range) - : search_range_(search_range), iterator_last_(search_range_.begin()), iterator_end_(search_range_.end()) + : search_range_(search_range), iterator_next_(++(search_range_.begin())), iterator_end_(search_range_.end()) { - nearest_landmark_table_.push_back(*iterator_last_); + //nearest_landmark_table_.push_back(*iterator_last_); } iterator begin() diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index b0a88662..79d7fa87 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -63,8 +63,20 @@ public: } Active_witness_iterator(Active_witness* aw, Pair_iterator lh) - : aw_(aw), lh_(lh), is_end_(false) - { + : aw_(aw), lh_(lh) + { + is_end_ = false; + if (lh_ == aw_->nearest_landmark_table_.end()) { + if (aw_->iterator_next_ == aw_->iterator_end_) + is_end_ = true; + else { + aw_->nearest_landmark_table_.push_back(*aw_->iterator_next_); + lh_ = --aw_->nearest_landmark_table_.end(); + ++(aw_->iterator_next_); + } + } + else + lh_++; } private : @@ -84,21 +96,18 @@ private : // the neighbor search can't be at the end iterator of a list GUDHI_CHECK(!is_end_ && lh_ != aw_->nearest_landmark_table_.end(), std::logic_error("Wrong active witness increment.")); // if the id of the current landmark is the same as the last one - if (lh_->first == aw_->iterator_last_->first) { - // if the next iterator is end, lh_it = end pointer - INS_iterator next_it = aw_->iterator_last_; next_it++; - if (next_it == aw_->iterator_end_) { + + lh_++; + if (lh_ == aw_->nearest_landmark_table_.end()) { + if (aw_->iterator_next_ == aw_->iterator_end_) is_end_ = true; - return; - } else { - ++(aw_->iterator_last_); - aw_->nearest_landmark_table_.push_back(*(aw_->iterator_last_)); + aw_->nearest_landmark_table_.push_back(*aw_->iterator_next_); + lh_ = std::prev(aw_->nearest_landmark_table_.end()); + ++(aw_->iterator_next_); } } - lh_++; } - }; } |