]> git.mxchange.org Git - simgear.git/commitdiff
Melchior FRANZ:
authorehofman <ehofman>
Sat, 11 Jun 2005 08:39:26 +0000 (08:39 +0000)
committerehofman <ehofman>
Sat, 11 Jun 2005 08:39:26 +0000 (08:39 +0000)
This is the more elegant solution that Andy had proposed in a response
to my RFC on Nasal initialization code in joystick configuration files.
As Nasal is initialized last (for good reason), subsystem can currently
not use it for initializing. postinit() is called on all subsystems
after all have been initialized.

simgear/structure/subsystem_mgr.cxx
simgear/structure/subsystem_mgr.hxx

index 8b1d5ea456309e1b99134f88ae43c73016bbe420..9ae7d7065c02ed5d19ee47c23e7867964116fda4 100644 (file)
@@ -25,6 +25,11 @@ SGSubsystem::init ()
 {
 }
 
+void
+SGSubsystem::postinit ()
+{
+}
+
 void
 SGSubsystem::reinit ()
 {
@@ -87,6 +92,13 @@ SGSubsystemGroup::init ()
         _members[i]->subsystem->init();
 }
 
+void
+SGSubsystemGroup::postinit ()
+{
+    for (unsigned int i = 0; i < _members.size(); i++)
+        _members[i]->subsystem->postinit();
+}
+
 void
 SGSubsystemGroup::reinit ()
 {
@@ -250,6 +262,13 @@ SGSubsystemMgr::init ()
             _groups[i].init();
 }
 
+void
+SGSubsystemMgr::postinit ()
+{
+    for (int i = 0; i < MAX_GROUPS; i++)
+            _groups[i].postinit();
+}
+
 void
 SGSubsystemMgr::reinit ()
 {
index cd612335b97e43a0ff2cd9da9ead7cdf19d9923d..03cbbb8d6effdd7b7a2da1e209346c09cbf9a209 100644 (file)
@@ -140,6 +140,18 @@ public:
   virtual void init ();
 
 
+  /**
+   * Initialize parts that depend on other subsystems having been initialized.
+   *
+   * <p>This method should set up all parts that depend on other
+   * subsystems. One example is the scripting/Nasal subsystem, which
+   * is initialized last. So, if a subsystem wants to execute Nasal
+   * code in subsystem-specific configuration files, it has to do that
+   * in its postinit() method.</p>
+   */
+  virtual void postinit ();
+
+
   /**
    * Reinitialize the subsystem.
    *
@@ -243,6 +255,7 @@ public:
     virtual ~SGSubsystemGroup ();
 
     virtual void init ();
+    virtual void postinit ();
     virtual void reinit ();
     virtual void bind ();
     virtual void unbind ();
@@ -315,6 +328,7 @@ public:
     virtual ~SGSubsystemMgr ();
 
     virtual void init ();
+    virtual void postinit ();
     virtual void reinit ();
     virtual void bind ();
     virtual void unbind ();