]> git.mxchange.org Git - simgear.git/commitdiff
find the last index instead of the last pos for addChild
authorehofman <ehofman>
Mon, 25 May 2009 11:12:24 +0000 (11:12 +0000)
committerTim Moore <timoore@redhat.com>
Tue, 2 Jun 2009 22:08:05 +0000 (00:08 +0200)
simgear/props/props.cxx

index 83b586c06a7637f696b4d196aef8ef9c18f6b9db..cd239ca3cc18aabba7e8ac57dffb2cb7a76bad1e 100644 (file)
@@ -264,20 +264,23 @@ find_child (const char * name, int index, const vector<SGPropertyNode_ptr>& node
 }
 
 /**
- * Locate the last child node with a given name.
-*/
+ * Locate the child node with the highest index of the same name
+ */
 static int
 find_last_child (const char * name, const vector<SGPropertyNode_ptr>& nodes)
 {
   int nNodes = nodes.size();
-  int pos = -1;
+  int index = 0;
 
   for (int i = 0; i < nNodes; i++) {
     SGPropertyNode * node = nodes[i];
     if (compare_strings(node->getName(), name))
-      pos++;
+    {
+      int idx = node->getIndex();
+      if (idx > index) index = idx;
+    }
   }
-  return pos;
+  return index;
 }
 
 
@@ -852,10 +855,10 @@ SGPropertyNode::getAliasTarget () const
 SGPropertyNode *
 SGPropertyNode::addChild (const char * name)
 {
-  int pos = find_last_child(name, _children);
+  int pos = find_last_child(name, _children)+1;
 
   SGPropertyNode_ptr node;
-  node = new SGPropertyNode(name, ++pos, this);
+  node = new SGPropertyNode(name, pos, this);
   _children.push_back(node);
   fireChildAdded(node);
   return node;