diff options
author | skachano <skachano@636b058d-ea47-450e-bf9e-a15bfbe3eedb> | 2016-10-04 18:07:42 +0000 |
---|---|---|
committer | skachano <skachano@636b058d-ea47-450e-bf9e-a15bfbe3eedb> | 2016-10-04 18:07:42 +0000 |
commit | e6992894cf4e9b76acee98e2c1ad840a3ebd7274 (patch) | |
tree | d4057926670ae3363e114d391b3e777690505bda /src/Witness_complex/include/gudhi/Active_witness | |
parent | 350b400fa0fb49c190b5b62934fa58869f23f4c4 (diff) |
Fixed a major bug in the Active_witness_iterator
git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1633 636b058d-ea47-450e-bf9e-a15bfbe3eedb
Former-commit-id: d4f474b44835b11e65a152f9d3fe87cc32b527f5
Diffstat (limited to 'src/Witness_complex/include/gudhi/Active_witness')
-rw-r--r-- | src/Witness_complex/include/gudhi/Active_witness/Active_witness.h | 14 | ||||
-rw-r--r-- | src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h | 12 |
2 files changed, 17 insertions, 9 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 7b169784..9ae41a69 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -34,23 +34,26 @@ namespace witness_complex { template< typename Id_distance_pair, typename INS_range > class Active_witness { -public: +public: typedef Active_witness<Id_distance_pair, INS_range> ActiveWitness; typedef typename INS_range::iterator INS_iterator; typedef Active_witness_iterator< ActiveWitness, Id_distance_pair, INS_iterator > iterator; typedef typename std::list<Id_distance_pair> Table; - + + Table end_element_table_ = {Id_distance_pair(-1,0)}; + typename Table::iterator end_pointer = end_element_table_.begin(); + Table nearest_landmark_table_; INS_range search_range_; INS_iterator iterator_last_; INS_iterator iterator_end_; Active_witness(INS_range search_range) - : search_range_(search_range), iterator_end_(search_range.end()), iterator_last_(search_range.begin()) + : search_range_(search_range), iterator_last_(search_range.begin()), iterator_end_(search_range.end()) { nearest_landmark_table_.push_back(*iterator_last_); } - + iterator begin() { return iterator(this, nearest_landmark_table_.begin()); @@ -60,9 +63,6 @@ public: { return iterator(this); } - - Table end_element_table_ = {Id_distance_pair(-1,0)}; - typename Table::iterator end_pointer = end_element_table_.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 658405f6..5d4f3d75 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 @@ -64,7 +64,7 @@ public: private : - Id_distance_pair dereference() const + Id_distance_pair& dereference() const { return *lh_; } @@ -76,9 +76,17 @@ private : void increment() { + // if neighbor search is at its end, check if lh_++ is end + if (aw_->iterator_last_ == aw_->iterator_end_) { + if (lh_++ == aw_->nearest_landmark_table_.end()) { + lh_ = aw_->end_pointer; + return; + } + return; + } // 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 = nullptr + // if the next iterator is end, lh_it = end pointer if (++(aw_->iterator_last_) == aw_->iterator_end_) { lh_ = aw_->end_pointer; return; |