Fix PropertyObject bug and interface improvements.

- Fix overwriting of parent node if PropertyObject::node() is
   called for a non-existing node.
 - Prevent implicit conversion from const char* and
   SGPropertyNode*
This commit is contained in:
Thomas Geymayer 2013-02-07 01:22:09 +01:00
parent fd8369142a
commit 21e2a769eb
2 changed files with 14 additions and 10 deletions

View 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

View 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)
{