]> git.mxchange.org Git - simgear.git/commitdiff
Add PropertyList typedef for vectors of property list nodes.
authortimoore <timoore>
Wed, 15 Jul 2009 23:08:30 +0000 (23:08 +0000)
committerTim Moore <timoore@redhat.com>
Thu, 16 Jul 2009 10:09:43 +0000 (12:09 +0200)
simgear/props/props.cxx
simgear/props/props.hxx

index 6d6c2edee4c02a599f9ca8eaeb06ff50bd8bc6ce..9191d4fb16fc23c3f802b5b65126aed8c62eb20f 100644 (file)
@@ -252,7 +252,7 @@ compare_strings (const char * s1, const char * s2)
  * Locate a child node by name and index.
  */
 static int
-find_child (const char * name, int index, const vector<SGPropertyNode_ptr>& nodes)
+find_child (const char * name, int index, const PropertyList& nodes)
 {
   int nNodes = nodes.size();
   for (int i = 0; i < nNodes; i++) {
@@ -270,7 +270,7 @@ find_child (const char * name, int index, const vector<SGPropertyNode_ptr>& node
  * 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)
+find_last_child (const char * name, const PropertyList& nodes)
 {
   int nNodes = nodes.size();
   int index = 0;
@@ -854,7 +854,7 @@ SGPropertyNode::getChild (const char * name, int index, bool create)
     SGPropertyNode_ptr node;
     pos = find_child(name, index, _removedChildren);
     if (pos >= 0) {
-      vector<SGPropertyNode_ptr>::iterator it = _removedChildren.begin();
+      PropertyList::iterator it = _removedChildren.begin();
       it += pos;
       node = _removedChildren[pos];
       _removedChildren.erase(it);
@@ -888,10 +888,10 @@ SGPropertyNode::getChild (const char * name, int index) const
 /**
  * Get all children with the same name (but different indices).
  */
-vector<SGPropertyNode_ptr>
+PropertyList
 SGPropertyNode::getChildren (const char * name) const
 {
-  vector<SGPropertyNode_ptr> children;
+  PropertyList children;
   int max = _children.size();
 
   for (int i = 0; i < max; i++)
@@ -929,7 +929,7 @@ SGPropertyNode::removeChild (int pos, bool keep)
   if (pos < 0 || pos >= (int)_children.size())
     return node;
 
-  vector<SGPropertyNode_ptr>::iterator it = _children.begin();
+  PropertyList::iterator it = _children.begin();
   it += pos;
   node = _children[pos];
   _children.erase(it);
@@ -962,10 +962,10 @@ SGPropertyNode::removeChild (const char * name, int index, bool keep)
 /**
   * Remove all children with the specified name.
   */
-vector<SGPropertyNode_ptr>
+PropertyList
 SGPropertyNode::removeChildren (const char * name, bool keep)
 {
-  vector<SGPropertyNode_ptr> children;
+  PropertyList children;
 
   for (int pos = _children.size() - 1; pos >= 0; pos--)
     if (compare_strings(_children[pos]->getName(), name))
index 44a56147016ad53efd1ddf0c8a20b0fb1cd14036..dc7a5878c4c1cf4ecea46b9ac6f7a740efded892 100644 (file)
@@ -697,6 +697,11 @@ class SGPropertyNode;
 typedef SGSharedPtr<SGPropertyNode> SGPropertyNode_ptr;
 typedef SGSharedPtr<const SGPropertyNode> SGConstPropertyNode_ptr;
 
+namespace simgear
+{
+typedef std::vector<SGPropertyNode_ptr> PropertyList;
+}
+
 \f
 /**
  * The property change listener interface.
@@ -892,12 +897,12 @@ public:
   /**
    * Get a vector of all children with the specified name.
    */
-  std::vector<SGPropertyNode_ptr> getChildren (const char * name) const;
+  simgear::PropertyList getChildren (const char * name) const;
 
   /**
    * Get a vector of all children with the specified name.
    */
-  std::vector<SGPropertyNode_ptr> getChildren (const std::string& name) const
+  simgear::PropertyList getChildren (const std::string& name) const
   { return getChildren(name.c_str()); }
 
   /**
@@ -922,15 +927,13 @@ public:
   /**
    * Remove all children with the specified name.
    */
-  std::vector<SGPropertyNode_ptr> removeChildren (const char * name,
-                                             bool keep = true);
-
+  simgear::PropertyList removeChildren (const char * name, bool keep = true);
 
   /**
    * Remove all children with the specified name.
    */
-  std::vector<SGPropertyNode_ptr> removeChildren (const std::string& name,
-                                             bool keep = true)
+  simgear::PropertyList removeChildren (const std::string& name,
+                                        bool keep = true)
   { return removeChildren(name.c_str(), keep); }
 
   //
@@ -1649,8 +1652,8 @@ private:
   /// To avoid cyclic reference counting loops this shall not be a reference
   /// counted pointer
   SGPropertyNode * _parent;
-  std::vector<SGPropertyNode_ptr> _children;
-  std::vector<SGPropertyNode_ptr> _removedChildren;
+  simgear::PropertyList _children;
+  simgear::PropertyList _removedChildren;
   std::vector<hash_table *> _linkedNodes;
   mutable std::string _path;
   mutable std::string _buffer;
@@ -1901,6 +1904,15 @@ inline bool SGPropertyNode::setValue(const T& val,
 {
   return ::setValue(this, val);
 }
+
+/**
+ * Utility function for creation of a child property node
+ */
+inline SGPropertyNode* makeChild(SGPropertyNode* parent, const char* name,
+                                 int index = 0)
+{
+    return parent->getChild(name, index, true);
+}
 #endif // __PROPS_HXX
 
 // end of props.hxx