X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fprops%2FpropertyObject.cxx;h=df3f81f990004088dbb2d88044cf95b7c2846105;hb=04dc28cb3307a2d78b024f533011628dbe5e5a52;hp=ff90ce77afdd3701630020ee39ad712a7643cf75;hpb=f53559b8d0167f61466e6d1c5b57030e0d73927c;p=simgear.git diff --git a/simgear/props/propertyObject.cxx b/simgear/props/propertyObject.cxx index ff90ce77..df3f81f9 100644 --- a/simgear/props/propertyObject.cxx +++ b/simgear/props/propertyObject.cxx @@ -21,6 +21,10 @@ #include "propertyObject.hxx" +#include + +#include + namespace simgear { @@ -31,61 +35,64 @@ void PropertyObjectBase::setDefaultRoot(SGPropertyNode* aRoot) static_defaultRoot = aRoot; } +PropertyObjectBase::PropertyObjectBase(const PropertyObjectBase& aOther) : + _path(aOther._path), + _prop(aOther._prop) +{ + +} + PropertyObjectBase::PropertyObjectBase(const char* aChild) : - _base(NULL), _path(aChild), _prop(NULL) { } PropertyObjectBase::PropertyObjectBase(SGPropertyNode* aNode, const char* aChild) : - _base(aNode), _path(aChild), - _prop(NULL) + _prop(aNode) { } SGPropertyNode* PropertyObjectBase::node(bool aCreate) const { - if (_prop) { + if (_path == NULL) { // already resolved return _prop; } - _prop = _base ? _base : static_defaultRoot; - if (_path) { - _prop = _prop->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 + _path = NULL; + } + return _prop; } -} // of namespace simgear - -void test() +SGPropertyNode* PropertyObjectBase::getOrThrow() const { - SGPropObjDouble foo("/bar/foo"); + SGPropertyNode* n = node(false); + if (!n) { + std::string path; + if (_prop) { + path = _prop->getPath(); + if (_path) { + path += '/'; + } + } - SGPropertyNode* zoob; + if (_path) { + path += _path; + } - SGPropObjDouble foo2 = SGPropObjDouble::create(zoob, "foo2", 42.0); - - foo = 1123.0; - foo2 = 43; - - std::string s("lalala"); - - foo = "lalal"; - - - SGPropObjString sp(zoob); - sp = "fooo"; - s = sp; - + throw sg_exception("Unknown property:" + path); + } - SGPropObjBool bp("/some nice big path"); - bp = false; - - bp = 456; - int i5 = bp; + return n; } + +} // of namespace simgear +