]> git.mxchange.org Git - simgear.git/commitdiff
change return value of SGPropertyNode::getPath to std::string
authorTim Moore <timoore33@gmail.com>
Fri, 18 Dec 2009 06:14:16 +0000 (07:14 +0100)
committerTim Moore <timoore33@gmail.com>
Tue, 9 Mar 2010 10:02:56 +0000 (11:02 +0100)
Also get rid of the cached value.

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

index c662eb7f95f808ab54af4f33b4453c08c015063e..acbcc92dfb7ba8a1bdda4aba870c111af24c36db 100644 (file)
@@ -1027,17 +1027,22 @@ SGPropertyNode::getDisplayName (bool simplify) const
 }
 
 
-const char *
+string
 SGPropertyNode::getPath (bool simplify) const
 {
-  // Calculate the complete path only once.
-  if (_parent != 0 && _path.empty()) {
-    _path = _parent->getPath(simplify);
-    _path += '/';
-    _path += getDisplayName(simplify);
+  typedef std::vector<SGConstPropertyNode_ptr> PList;
+  PList pathList;
+  for (const SGPropertyNode* node = this; node->_parent; node = node->_parent)
+    pathList.push_back(node);
+  string result;
+  for (PList::reverse_iterator itr = pathList.rbegin(),
+         rend = pathList.rend();
+       itr != rend;
+       ++itr) {
+    result += '/';
+    result += (*itr)->getDisplayName(simplify);
   }
-
-  return _path.c_str();
+  return result;
 }
 
 props::Type
index 984bb1b5717b37657b03ff9db88714910a39ca4c..b9ba6495e2858d8ce51a4e591931d08608778351 100644 (file)
@@ -994,7 +994,7 @@ public:
   /**
    * Get the path to this node from the root.
    */
-  const char * getPath (bool simplify = false) const;
+  std::string getPath (bool simplify = false) const;
 
 
   /**
@@ -1675,7 +1675,6 @@ private:
   simgear::PropertyList _children;
   simgear::PropertyList _removedChildren;
   std::vector<hash_table *> _linkedNodes;
-  mutable std::string _path;
   mutable std::string _buffer;
   hash_table * _path_cache;
   simgear::props::Type _type;