From 63985edd59be09af0356785d0842ab26e881c48a Mon Sep 17 00:00:00 2001 From: Hans-Christian Ebke Date: Fri, 8 Jan 2016 00:49:04 +0100 Subject: [PATCH] Fixed allocation bug. --- src/OpenMesh/Core/Mesh/BaseKernel.hh | 2 +- src/OpenMesh/Core/Utils/PropertyContainer.hh | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/OpenMesh/Core/Mesh/BaseKernel.hh b/src/OpenMesh/Core/Mesh/BaseKernel.hh index 9f2b7dbb..6370ae63 100644 --- a/src/OpenMesh/Core/Mesh/BaseKernel.hh +++ b/src/OpenMesh/Core/Mesh/BaseKernel.hh @@ -648,7 +648,7 @@ protected: //------------------------------------------- synchronize properties void vprops_reserve(size_t _n) const { vprops_.reserve(_n); } void vprops_resize(size_t _n) const { vprops_.resize(_n); } - void vprops_resize_if_smaller(size_t _n) const { if (vprops_.size() < _n) vprops_.resize(_n); } + void vprops_resize_if_smaller(size_t _n) const { vprops_.resize_if_smaller(_n); } void vprops_clear() { vprops_.clear(); } diff --git a/src/OpenMesh/Core/Utils/PropertyContainer.hh b/src/OpenMesh/Core/Utils/PropertyContainer.hh index 662cc1ae..6af6efe5 100644 --- a/src/OpenMesh/Core/Utils/PropertyContainer.hh +++ b/src/OpenMesh/Core/Utils/PropertyContainer.hh @@ -211,6 +211,11 @@ public: [_n](BaseProperty* p) { if (p) p->resize(_n); }); } + void resize_if_smaller(size_t _n) const { + std::for_each(properties_.begin(), properties_.end(), + [_n](BaseProperty* p) { if (p && p->n_elements() < _n) p->resize(_n); }); + } + void swap(size_t _i0, size_t _i1) const { std::for_each(properties_.begin(), properties_.end(), [_i0, _i1](BaseProperty* p) { if (p) p->swap(_i0, _i1); }); @@ -224,6 +229,10 @@ public: std::for_each(properties_.begin(), properties_.end(), Resize(_n)); } + void resize_if_smaller(size_t _n) const { + std::for_each(properties_.begin(), properties_.end(), ResizeIfSmaller(_n)); + } + void swap(size_t _i0, size_t _i1) const { std::for_each(properties_.begin(), properties_.end(), Swap(_i0, _i1)); } @@ -290,6 +299,13 @@ private: size_t n_; }; + struct ResizeIfSmaller + { + ResizeIfSmaller(size_t _n) : n_(_n) {} + void operator()(BaseProperty* _p) const { if (_p && _p->n_elements() < n_) _p->resize(n_); } + size_t n_; + }; + struct ClearAll { ClearAll() {}