]> git.mxchange.org Git - simgear.git/commitdiff
Formal shutdown interface on SGSubsystem.
authorJames Turner <zakalawe@mac.com>
Fri, 5 Nov 2010 09:19:22 +0000 (09:19 +0000)
committerJames Turner <zakalawe@mac.com>
Fri, 5 Nov 2010 09:19:22 +0000 (09:19 +0000)
simgear/structure/subsystem_mgr.cxx
simgear/structure/subsystem_mgr.hxx

index 6e4dff2901ed9677b02962a316051878cfb9ef65..387d097a091bd855ebfe189aeb38b092135ded59 100644 (file)
@@ -38,6 +38,11 @@ SGSubsystem::reinit ()
 {
 }
 
+void
+SGSubsystem::shutdown ()
+{
+}
+
 void
 SGSubsystem::bind ()
 {
@@ -141,6 +146,14 @@ SGSubsystemGroup::reinit ()
         _members[i]->subsystem->reinit();
 }
 
+void
+SGSubsystemGroup::shutdown ()
+{
+    // reverse order to prevent order dependency problems
+    for (unsigned int i = _members.size(); i > 0; i--)
+        _members[i-1]->subsystem->shutdown();
+}
+
 void
 SGSubsystemGroup::bind ()
 {
@@ -420,6 +433,15 @@ SGSubsystemMgr::reinit ()
             _groups[i]->reinit();
 }
 
+void
+SGSubsystemMgr::shutdown ()
+{
+    // reverse order to prevent order dependency problems
+    for (int i = MAX_GROUPS-1; i >= 0; i--)
+        _groups[i]->shutdown();
+}
+
+
 void
 SGSubsystemMgr::bind ()
 {
index b36bdb9aa1dc5137fd098f0ed0f16da353dc0c03..c49d73fd2db8d143bf3ae47ae606c4aa29cc6848 100644 (file)
@@ -169,6 +169,16 @@ public:
   virtual void reinit ();
 
 
+  /**
+   * Shutdown the subsystem.
+   *
+   * <p>Release any state associated with subsystem. Shutdown happens in
+   * the reverse order to init(), so this is the correct place to do
+   * shutdown that depends on other subsystems.
+   * </p>
+   */
+  virtual void shutdown ();
+   
   /**
    * Acquire the subsystem's property bindings.
    *
@@ -297,6 +307,7 @@ public:
     virtual void init ();
     virtual void postinit ();
     virtual void reinit ();
+    virtual void shutdown ();
     virtual void bind ();
     virtual void unbind ();
     virtual void update (double delta_time_sec);
@@ -392,6 +403,7 @@ public:
     virtual void init ();
     virtual void postinit ();
     virtual void reinit ();
+    virtual void shutdown ();
     virtual void bind ();
     virtual void unbind ();
     virtual void update (double delta_time_sec);