From ecc6aaf89753345a472aac89b73a2deff10cc26c Mon Sep 17 00:00:00 2001 From: skachano Date: Fri, 20 Jan 2017 17:10:45 +0000 Subject: Redesigned the whole Active_witness_iterator, still doesn't work git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1978 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 732862e9c29fc326b8ca4f5e6bb5f14945b0d924 --- .../include/gudhi/Active_witness/Active_witness.h | 6 ++-- .../gudhi/Active_witness/Active_witness_iterator.h | 33 ++++++++++++++-------- 2 files changed, 24 insertions(+), 15 deletions(-) (limited to 'src/Witness_complex') 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_++; } - }; } -- cgit v1.2.3