From 422b3dc62e2656cd2579c71969ce0e108253fa6a Mon Sep 17 00:00:00 2001 From: Hans-Christian Ebke Date: Mon, 23 Nov 2015 20:50:48 +0100 Subject: [PATCH 1/3] Tweaks to HeapT.hh. --- src/OpenMesh/Tools/Utils/HeapT.hh | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/OpenMesh/Tools/Utils/HeapT.hh b/src/OpenMesh/Tools/Utils/HeapT.hh index bef721e4..12c5cfb4 100644 --- a/src/OpenMesh/Tools/Utils/HeapT.hh +++ b/src/OpenMesh/Tools/Utils/HeapT.hh @@ -79,6 +79,7 @@ #include "Config.hh" #include #include +#include //== NAMESPACE ================================================================ @@ -148,13 +149,20 @@ public: HeapT() : HeapVector() {} /// Construct with a given \c HeapIterface. - HeapT(const HeapInterface& _interface) - : HeapVector(), interface_(_interface) + HeapT(HeapInterface _interface) + : HeapVector(), interface_(std::move(_interface)) {} /// Destructor. ~HeapT(){}; + HeapInterface &getInterface() { + return interface_; + } + + const HeapInterface &getInterface() const { + return interface_; + } /// clear the heap void clear() { HeapVector::clear(); } @@ -187,14 +195,14 @@ public: HeapEntry front() const { assert(!empty()); - return entry(0); + return HeapVector::front(); } /// delete the first entry void pop_front() { assert(!empty()); - reset_heap_position(entry(0)); + reset_heap_position(HeapVector::front()); if (size() > 1) { entry(0, entry(size()-1)); @@ -338,9 +346,9 @@ void HeapT:: downheap(size_t _idx) { - HeapEntry h = entry(_idx); + const HeapEntry h = entry(_idx); size_t childIdx; - size_t s = size(); + const size_t s = size(); while(_idx < s) { From 201dee45fb7389333f759a85fcbf9737009045aa Mon Sep 17 00:00:00 2001 From: Hans-Christian Ebke Date: Mon, 23 Nov 2015 21:16:34 +0100 Subject: [PATCH 2/3] HeapT: New optimization should compile in C++98 as well... --- src/OpenMesh/Tools/Utils/HeapT.hh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/OpenMesh/Tools/Utils/HeapT.hh b/src/OpenMesh/Tools/Utils/HeapT.hh index 12c5cfb4..545cfb5e 100644 --- a/src/OpenMesh/Tools/Utils/HeapT.hh +++ b/src/OpenMesh/Tools/Utils/HeapT.hh @@ -79,7 +79,9 @@ #include "Config.hh" #include #include +#if __cplusplus > 199711L || defined(__GXX_EXPERIMENTAL_CXX0X__) #include +#endif //== NAMESPACE ================================================================ @@ -148,11 +150,18 @@ public: /// Constructor HeapT() : HeapVector() {} +#if __cplusplus > 199711L || defined(__GXX_EXPERIMENTAL_CXX0X__) /// Construct with a given \c HeapIterface. HeapT(HeapInterface _interface) : HeapVector(), interface_(std::move(_interface)) {} - +#else + /// Construct with a given \c HeapIterface. + HeapT(const HeapInterface &_interface) + : HeapVector(), interface_(_interface) + {} +#endif + /// Destructor. ~HeapT(){}; From ec8936bfa6d74274146a44a86b0dccf0b25efa62 Mon Sep 17 00:00:00 2001 From: Hans-Christian Ebke Date: Tue, 24 Nov 2015 01:45:44 +0100 Subject: [PATCH 3/3] Introduce ArrayKernel::clean_keep_reservation(). --- src/OpenMesh/Core/Mesh/ArrayKernel.cc | 10 ++++++++++ src/OpenMesh/Core/Mesh/ArrayKernel.hh | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/src/OpenMesh/Core/Mesh/ArrayKernel.cc b/src/OpenMesh/Core/Mesh/ArrayKernel.cc index de857351..00c8d3c5 100644 --- a/src/OpenMesh/Core/Mesh/ArrayKernel.cc +++ b/src/OpenMesh/Core/Mesh/ArrayKernel.cc @@ -177,6 +177,16 @@ void ArrayKernel::garbage_collection(bool _v, bool _e, bool _f) garbage_collection( empty_vh,empty_hh,empty_fh,_v, _e, _f); } +void ArrayKernel::clean_keep_reservation() +{ + vertices_.clear(); + + edges_.clear(); + + faces_.clear(); + +} + void ArrayKernel::clean() { diff --git a/src/OpenMesh/Core/Mesh/ArrayKernel.hh b/src/OpenMesh/Core/Mesh/ArrayKernel.hh index ca64af46..eea18385 100644 --- a/src/OpenMesh/Core/Mesh/ArrayKernel.hh +++ b/src/OpenMesh/Core/Mesh/ArrayKernel.hh @@ -306,6 +306,14 @@ public: */ void clean(); + /** \brief Reset the whole mesh + * + * This will remove all elements from the mesh but keeps the properties. + * In contrast to clean() the memory used for the elements will remain + * allocated. + */ + void clean_keep_reservation(); + // --- number of items --- size_t n_vertices() const { return vertices_.size(); } size_t n_halfedges() const { return 2*edges_.size(); }