From d05555319fe45d331556fde683d960076e1a7625 Mon Sep 17 00:00:00 2001 From: Sylvain Thery Date: Mon, 20 Aug 2012 16:38:12 +0200 Subject: [PATCH] Made Collector thread safe --- include/Algo/Selection/collector.h | 16 ++++++++-------- include/Algo/Selection/collector.hpp | 12 ++++++------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/include/Algo/Selection/collector.h b/include/Algo/Selection/collector.h index 842e382e..3f101023 100644 --- a/include/Algo/Selection/collector.h +++ b/include/Algo/Selection/collector.h @@ -53,6 +53,7 @@ protected: typedef typename PFP::REAL REAL; typename PFP::MAP& map; + unsigned int m_thread; Dart centerDart; @@ -62,7 +63,7 @@ protected: std::vector border; public: - Collector(typename PFP::MAP& m); + Collector(typename PFP::MAP& m, unsigned int thread =0); inline void init(Dart d) { @@ -122,9 +123,8 @@ template class Collector_OneRing : public Collector { public: - Collector_OneRing(typename PFP::MAP& m) : - Collector(m) - {} + Collector_OneRing(typename PFP::MAP& m, unsigned int thread=0): + Collector(m, thread) {} void collectAll(Dart d); void collectBorder(Dart d); }; @@ -145,11 +145,10 @@ protected: const VertexAttribute& position; typename PFP::REAL radius; typename PFP::REAL area; - unsigned int m_thread; public: Collector_WithinSphere(typename PFP::MAP& m, const VertexAttribute& p, typename PFP::REAL r = 0, unsigned int thread=0) : - Collector(m), + Collector(m, thread), position(p), radius(r), area(0), @@ -188,8 +187,9 @@ public: typename PFP::MAP& m, const VertexAttribute& p, const VertexAttribute& n, - typename PFP::REAL a - ) : Collector(m), position(p), normal(n), angleThreshold(a) + typename PFP::REAL a, + unsigned int thread=0 + ) : Collector(m,thread), position(p), normal(n), angleThreshold(a) {} inline void setAngleThreshold(typename PFP::REAL a) { angleThreshold = a; } inline typename PFP::REAL getAngleThreshold() const { return angleThreshold; } diff --git a/include/Algo/Selection/collector.hpp b/include/Algo/Selection/collector.hpp index c608a444..7df53f57 100644 --- a/include/Algo/Selection/collector.hpp +++ b/include/Algo/Selection/collector.hpp @@ -39,7 +39,7 @@ namespace Selection *********************************************************/ template -Collector::Collector(typename PFP::MAP& m) : map(m) +Collector::Collector(typename PFP::MAP& m, unsigned int thread) : map(m), m_thread(thread) {} template @@ -295,9 +295,9 @@ void Collector_NormalAngle::collectAll(Dart d) this->insideFaces.reserve(32); this->border.reserve(32); - CellMarkerStore vm(this->map); // mark the collected inside-vertices - CellMarkerStore em(this->map); // mark the collected inside-edges + border-edges - CellMarkerStore fm(this->map); // mark the collected inside-faces + border-faces + CellMarkerStore vm(this->map, m_thread); // mark the collected inside-vertices + CellMarkerStore em(this->map, m_thread); // mark the collected inside-edges + border-edges + CellMarkerStore fm(this->map, m_thread); // mark the collected inside-faces + border-faces this->insideVertices.push_back(this->centerDart); vm.mark(this->centerDart); @@ -360,8 +360,8 @@ void Collector_NormalAngle::collectBorder(Dart d) this->border.reserve(128); this->insideVertices.reserve(128); - CellMarkerStore vm(this->map); // mark the collected inside-vertices - CellMarkerStore em(this->map); // mark the collected inside-edges + border-edges + CellMarkerStore vm(this->map, m_thread); // mark the collected inside-vertices + CellMarkerStore em(this->map, m_thread); // mark the collected inside-edges + border-edges this->insideVertices.push_back(this->centerDart); vm.mark(this->centerDart); -- GitLab