]> git.mxchange.org Git - simgear.git/blobdiff - simgear/props/PropertyBasedMgr.cxx
Guard usage of CURLMOPT_MAX_TOTAL_CONNECTIONS
[simgear.git] / simgear / props / PropertyBasedMgr.cxx
index b3d3ed747581450cac288e7b6f96760c7858a16c..c133d1522a74b17111c449dcf3db0f6a2aa1cb98 100644 (file)
@@ -18,6 +18,8 @@
 
 #include "PropertyBasedMgr.hxx"
 
+#include <boost/foreach.hpp>
+
 #include <stdexcept>
 #include <string>
 
@@ -34,6 +36,7 @@ namespace simgear
   //----------------------------------------------------------------------------
   void PropertyBasedMgr::shutdown()
   {
+    _props->removeAllChildren();
     _props->removeChangeListener(this);
   }
 
@@ -65,6 +68,20 @@ namespace simgear
     return _elements[index];
   }
 
+  //----------------------------------------------------------------------------
+  PropertyBasedElementPtr
+  PropertyBasedMgr::getElement(const std::string& name) const
+  {
+    if( name.empty() )
+      return PropertyBasedElementPtr();
+
+    BOOST_FOREACH(PropertyBasedElementPtr el, _elements)
+      if( el && el->getProps()->getStringValue("name") == name )
+        return el;
+
+    return PropertyBasedElementPtr();
+  }
+
   //----------------------------------------------------------------------------
   const SGPropertyNode* PropertyBasedMgr::getPropertyRoot() const
   {
@@ -110,6 +127,7 @@ namespace simgear
       _elements.resize(index + 1);
     }
     else if( _elements[index] )
+    {
       SG_LOG
       (
         SG_GENERAL,
@@ -117,8 +135,11 @@ namespace simgear
         _name_elements << "[" << index << "] already exists!"
       );
 
+      // Give anything holding a reference to this element to release it
+      _elements[index]->onDestroy();
+    }
+
     PropertyBasedElementPtr el = _element_factory(child);
-    el->setSelf( el );
     _elements[index] = el;
     elementCreated( el );
   }
@@ -142,8 +163,11 @@ namespace simgear
         "can't removed unknown " << _name_elements << "[" << index << "]!"
       );
     else
+    {
       // remove the element...
+      _elements[index]->onDestroy();
       _elements[index].reset();
+    }
   }
 
 } // namespace simgear