Commit 6e970852 authored by Hans-Christian Ebke's avatar Hans-Christian Ebke

PropertyManager: Added ability to get property name.

git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@888 fdac6126-5c0c-442c-9429-916003d36597
parent c70870a6
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
#include <sstream> #include <sstream>
#include <stdexcept> #include <stdexcept>
#include <string>
namespace OpenMesh { namespace OpenMesh {
...@@ -94,7 +95,7 @@ class PropertyManager { ...@@ -94,7 +95,7 @@ class PropertyManager {
* the instance merely acts as a convenience wrapper around an existing property with no * the instance merely acts as a convenience wrapper around an existing property with no
* lifecycle management whatsoever. * lifecycle management whatsoever.
*/ */
PropertyManager(MeshT &mesh, const char *propname, bool existing = false) : mesh_(&mesh), retain_(existing) { PropertyManager(MeshT &mesh, const char *propname, bool existing = false) : mesh_(&mesh), retain_(existing), name_(propname) {
if (existing) { if (existing) {
if (!mesh_->get_property_handle(prop_, propname)) { if (!mesh_->get_property_handle(prop_, propname)) {
std::ostringstream oss; std::ostringstream oss;
...@@ -117,6 +118,7 @@ class PropertyManager { ...@@ -117,6 +118,7 @@ class PropertyManager {
std::swap(mesh_, rhs.mesh_); std::swap(mesh_, rhs.mesh_);
std::swap(prop_, rhs.prop_); std::swap(prop_, rhs.prop_);
std::swap(retain_, rhs.retain_); std::swap(retain_, rhs.retain_);
std::swap(name_, rhs.name_);
} }
static bool propertyExists(MeshT &mesh, const char *propname) { static bool propertyExists(MeshT &mesh, const char *propname) {
...@@ -129,11 +131,13 @@ class PropertyManager { ...@@ -129,11 +131,13 @@ class PropertyManager {
const PROPTYPE &getRawProperty() const { return prop_; } const PROPTYPE &getRawProperty() const { return prop_; }
const std::string &getName() const { return name_; }
#if __cplusplus > 199711L or __GXX_EXPERIMENTAL_CXX0X__ #if __cplusplus > 199711L or __GXX_EXPERIMENTAL_CXX0X__
/** /**
* Move constructor. Transfers ownership (delete responsibility). * Move constructor. Transfers ownership (delete responsibility).
*/ */
PropertyManager(PropertyManager &&rhs) : mesh_(rhs.mesh_), prop_(rhs.prop_), retain_(rhs.retain_) { PropertyManager(PropertyManager &&rhs) : mesh_(rhs.mesh_), prop_(rhs.prop_), retain_(rhs.retain_), name_(rhs.name_) {
rhs.retain_ = true; rhs.retain_ = true;
} }
...@@ -147,6 +151,7 @@ class PropertyManager { ...@@ -147,6 +151,7 @@ class PropertyManager {
mesh_ = rhs.mesh_; mesh_ = rhs.mesh_;
prop_ = rhs.prop_; prop_ = rhs.prop_;
retain_ = rhs.retain_; retain_ = rhs.retain_;
name_ = rhs.name_;
rhs.retain_ = true; rhs.retain_ = true;
return *this; return *this;
...@@ -167,23 +172,24 @@ class PropertyManager { ...@@ -167,23 +172,24 @@ class PropertyManager {
#else #else
class Proxy { class Proxy {
private: private:
Proxy(MeshT *mesh_, PROPTYPE prop_, bool retain_) : Proxy(MeshT *mesh_, PROPTYPE prop_, bool retain_, const std::string &name_) :
mesh_(mesh_), prop_(prop_), retain_(retain_) {} mesh_(mesh_), prop_(prop_), retain_(retain_), name_(name_) {}
MeshT *mesh_; MeshT *mesh_;
PROPTYPE prop_; PROPTYPE prop_;
bool retain_; bool retain_;
std::string name_;
friend class PropertyManager; friend class PropertyManager;
}; };
operator Proxy() { operator Proxy() {
Proxy p(mesh_, prop_, retain_); Proxy p(mesh_, prop_, retain_, name_);
mesh_ = 0; mesh_ = 0;
retain_ = true; retain_ = true;
return p; return p;
} }
PropertyManager(Proxy p) : mesh_(p.mesh_), prop_(p.prop_), retain_(p.retain_) {} PropertyManager(Proxy p) : mesh_(p.mesh_), prop_(p.prop_), retain_(p.retain_), name_(p.name_) {}
PropertyManager &operator=(Proxy p) { PropertyManager &operator=(Proxy p) {
PropertyManager(p).swap(*this); PropertyManager(p).swap(*this);
...@@ -261,6 +267,7 @@ class PropertyManager { ...@@ -261,6 +267,7 @@ class PropertyManager {
MeshT *mesh_; MeshT *mesh_;
PROPTYPE prop_; PROPTYPE prop_;
bool retain_; bool retain_;
std::string name_;
}; };
} /* namespace OpenMesh */ } /* namespace OpenMesh */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment