From cd722dc2e68b1d2045a89ea0915b7e5e3a7b4569 Mon Sep 17 00:00:00 2001 From: Joseph Mirabel <jmirabel@laas.fr> Date: Fri, 29 Aug 2014 14:02:51 +0200 Subject: [PATCH] Roadmap do not duplicate NodeHistogram --- include/hpp/manipulation/roadmap.hh | 3 ++- src/roadmap.cc | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/include/hpp/manipulation/roadmap.hh b/include/hpp/manipulation/roadmap.hh index 9a54daf..929830d 100644 --- a/include/hpp/manipulation/roadmap.hh +++ b/include/hpp/manipulation/roadmap.hh @@ -55,9 +55,10 @@ namespace hpp { Roadmap (const core::DistancePtr_t& distance, const core::DevicePtr_t& robot); private: + typedef std::list < graph::HistogramPtr_t > Histograms; /// Keep track of the leaf that are explored. /// There should be one histogram per foliation. - std::vector < graph::HistogramPtr_t > histograms_; + Histograms histograms_; }; } // namespace manipulation } // namespace hpp diff --git a/src/roadmap.cc b/src/roadmap.cc index 10e478e..d7b78f3 100644 --- a/src/roadmap.cc +++ b/src/roadmap.cc @@ -14,6 +14,8 @@ // received a copy of the GNU Lesser General Public License along with // hpp-manipulation. If not, see <http://www.gnu.org/licenses/>. +#include <hpp/util/pointer.hh> + #include "hpp/manipulation/roadmap.hh" namespace hpp { @@ -29,8 +31,8 @@ namespace hpp { void Roadmap::clear () { Parent::clear (); - std::vector < graph::HistogramPtr_t > newHistograms; - std::vector < graph::HistogramPtr_t >::iterator it; + Histograms newHistograms; + Histograms::iterator it; for (it = histograms_.begin(); it != histograms_.end(); it++) { newHistograms.push_back ((*it)->clone ()); } @@ -45,7 +47,7 @@ namespace hpp { void Roadmap::statInsert (ConfigurationIn_t config) { - std::vector < graph::HistogramPtr_t >::iterator it; + Histograms::iterator it; for (it = histograms_.begin(); it != histograms_.end(); it++) { (*it)->add (config); } @@ -58,6 +60,13 @@ namespace hpp { void Roadmap::constraintGraph (const graph::GraphPtr_t& graph) { + Histograms::iterator it = histograms_.begin(); + for (; it != histograms_.end();) { + if (HPP_DYNAMIC_PTR_CAST (graph::NodeHistogram, *it)) + it = histograms_.erase (it); + else + it++; + } histograms_.push_back (graph::HistogramPtr_t (new graph::NodeHistogram (graph))); } } // namespace manipulation -- GitLab