]> git.mxchange.org Git - simgear.git/blobdiff - simgear/structure/subsystem_mgr.hxx
Some Linux platforms need <cstdio> for snprintf.
[simgear.git] / simgear / structure / subsystem_mgr.hxx
index 186849192df1f9901cf71fe3170e568137fc0ee9..caa804e8edaadbad68fc7e80b3153483211063eb 100644 (file)
@@ -1,4 +1,3 @@
-
 // Written by David Megginson, started 2000-12
 //
 // Copyright (C) 2000  David Megginson, david@megginson.com
@@ -32,7 +31,7 @@
 
 #include <simgear/timing/timestamp.hxx>
 #include <simgear/structure/SGSharedPtr.hxx>
-
+#include <simgear/misc/strutils.hxx>
 
 class TimingInfo
 {
@@ -55,7 +54,6 @@ typedef std::vector<TimingInfo>::iterator eventTimeVecIterator;
 
 typedef void (*SGSubsystemTimingCb)(void* userData, const std::string& name, SampleStatistic* pStatistic);
 
-\f
 /**
  * Basic interface for all FlightGear subsystems.
  *
@@ -284,8 +282,8 @@ protected:
   static void* reportTimingUserData;
 };
 
+typedef SGSharedPtr<SGSubsystem> SGSubsystemRef;
 
-\f
 /**
  * A group of FlightGear subsystems.
  */
@@ -315,28 +313,38 @@ public:
     virtual void remove_subsystem (const std::string &name);
     virtual bool has_subsystem (const std::string &name) const;
 
+    /**
+     * Remove all subsystems.
+     */
+    virtual void clearSubsystems();
+
     void reportTiming(void);
 
     /**
      *
      */
     void set_fixed_update_time(double fixed_dt);
+        
+       /**
+        * retrive list of member subsystem names
+        */ 
+    string_list member_names() const;
+        
 private:
 
     class Member;
     Member* get_member (const std::string &name, bool create = false);
 
-    std::vector<Member *> _members;
+    typedef std::vector<Member *> MemberVec;
+    MemberVec _members;
     
     double _fixedUpdateTime;
     double _updateTimeRemainder;
     
   /// index of the member we are currently init-ing
-    int _initPosition;
+    unsigned int _initPosition;
 };
 
-
-\f
 /**
  * Manage subsystems for FlightGear.
  *
@@ -395,24 +403,22 @@ public:
      * remove a subsystem, and return a pointer to it.
      * returns NULL if the subsystem was not found.
      */
-    virtual SGSubsystem* remove(const char* name);
+    virtual void remove(const char* name);
 
     virtual SGSubsystemGroup * get_group (GroupType group);
 
-    virtual SGSubsystem * get_subsystem(const std::string &name) const;
+    virtual SGSubsystem* get_subsystem(const std::string &name) const;
 
     void reportTiming();
     void setReportTimingCb(void* userData,SGSubsystemTimingCb cb) {reportTimingCb = cb;reportTimingUserData = userData;}
 
 private:
     SGSubsystemGroup* _groups[MAX_GROUPS];
-    int _initPosition;
+    unsigned int _initPosition;
   
+    // non-owning reference
     typedef std::map<std::string, SGSubsystem*> SubsystemDict;
     SubsystemDict _subsystem_map;
 };
 
-
-
 #endif // __SUBSYSTEM_MGR_HXX
-