From 9f1560d5a57c38b5986e03bf0c62d0213e19b2af Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Fri, 9 May 2014 14:27:11 +0000 Subject: [PATCH] faster GFace::vertices() (3x speedup for eFFi test case) --- Geo/GFace.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Geo/GFace.cpp b/Geo/GFace.cpp index 7081ee26f0..d44829d026 100644 --- a/Geo/GFace.cpp +++ b/Geo/GFace.cpp @@ -261,18 +261,17 @@ surface_params GFace::getSurfaceParams() const std::list<GVertex*> GFace::vertices() const { - std::list<GEdge*>::const_iterator it = l_edges.begin(); - std::list<GVertex*>ret; - while (it != l_edges.end()){ + std::set<GVertex*> v; + for(std::list<GEdge*>::const_iterator it = l_edges.begin(); + it != l_edges.end(); ++it){ GVertex *v1 = (*it)->getBeginVertex(); + if(v1) v.insert(v1); GVertex *v2 = (*it)->getEndVertex(); - if(v1 && std::find(ret.begin(), ret.end(), v1) == ret.end()) - ret.push_back(v1); - if(v2 && std::find(ret.begin(), ret.end(), v2) == ret.end()) - ret.push_back(v2); - ++it; + if(v2) v.insert(v2); } - return ret; + std::list<GVertex*> res; + res.insert(res.begin(), v.begin(), v.end()); + return res; } void GFace::setVisibility(char val, bool recursive) -- GitLab