]> git.mxchange.org Git - simgear.git/commitdiff
Fix PropertyObject bug and interface improvements.
authorThomas Geymayer <tomgey@gmail.com>
Thu, 7 Feb 2013 00:22:09 +0000 (01:22 +0100)
committerThomas Geymayer <tomgey@gmail.com>
Thu, 7 Feb 2013 00:25:55 +0000 (01:25 +0100)
 - Fix overwriting of parent node if PropertyObject::node() is
   called for a non-existing node.
 - Prevent implicit conversion from const char* and
   SGPropertyNode*

simgear/props/propertyObject.cxx
simgear/props/propertyObject.hxx

index f97209af3f25de472391b766f5679ec5fa8fabcf..7a46056080ea67b153c27d53d4628d4c2abbd8cf 100644 (file)
@@ -66,15 +66,17 @@ SGPropertyNode* PropertyObjectBase::node(bool aCreate) const
     return _prop;
   }
   
-  SGPropertyNode* r = _prop ? _prop : static_defaultRoot;
-  _prop = r->getNode(_path, aCreate);
+  SGPropertyNode *r = _prop ? _prop : static_defaultRoot,
+                 *prop = r->getNode(_path, aCreate);
   
-  if (_prop) {
-    // resolve worked, we will cache from now on, so clear _path
+  if( prop )
+  {
+    // resolve worked, we will cache from now on, so clear _path and cache prop
     _path = NULL;
+    _prop = prop;
   }
 
-  return _prop;
+  return prop;
 }
 
 SGPropertyNode* PropertyObjectBase::getOrThrow() const
index 753be9f4cd1c4aada173dd2ca2d0e3115fd5182b..ffa4866bae4be40531e81f9adde371daef9f2093 100644 (file)
@@ -59,19 +59,20 @@ template <typename T>
 class PropertyObject : PropertyObjectBase
 {
 public:
-  PropertyObject();
+  PropertyObject()
+  {}
   
   /**
    * Create from path relative to the default root, and option default value
    */
-  PropertyObject(const char* aChild) :
+  explicit PropertyObject(const char* aChild) :
     PropertyObjectBase(aChild)
   { }
   
   /**
    * Create from a node, with optional relative path
    */
-  PropertyObject(SGPropertyNode* aNode, const char* aChild = NULL) :
+  explicit PropertyObject(SGPropertyNode* aNode, const char* aChild = NULL) :
     PropertyObjectBase(aNode, aChild)
   {
   
@@ -115,6 +116,7 @@ public:
   {
     SGPropertyNode* n = PropertyObjectBase::node(true);
     if (!n) {
+      std::cout << "no node" << std::endl;
       return aValue;
     }
     
@@ -157,13 +159,13 @@ template <>
 class PropertyObject<std::string> : PropertyObjectBase
 {
 public:
-  PropertyObject(const char* aChild) :
+  explicit PropertyObject(const char* aChild) :
     PropertyObjectBase(aChild)
   { }
   
 
   
-  PropertyObject(SGPropertyNode* aNode, const char* aChild = NULL) :
+  explicit PropertyObject(SGPropertyNode* aNode, const char* aChild = NULL) :
     PropertyObjectBase(aNode, aChild)
   {