X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fstructure%2Fsubsystem_mgr.hxx;h=212ce58455330b4d2db7e0e48ea6c3758d08f344;hb=ddf9e08069406be1beb95ce3ac00ae59731a6d78;hp=c5823e9a25bfc23939897069bc73de880c1a6b1a;hpb=240ed6f0b11d8b7ff84ca101078ef17ac6123784;p=simgear.git
diff --git a/simgear/structure/subsystem_mgr.hxx b/simgear/structure/subsystem_mgr.hxx
index c5823e9a..212ce584 100644
--- a/simgear/structure/subsystem_mgr.hxx
+++ b/simgear/structure/subsystem_mgr.hxx
@@ -25,25 +25,9 @@
#include
-#if 0
-#ifdef HAVE_WINDOWS_H
-# include
-# include
-#endif
-
-#include STL_STRING
-SG_USING_STD(string);
-
-#include
-SG_USING_STD(vector);
-#endif
-
#include
#include
*/
-class SGSubsystem
+class SGSubsystem : public SGReferenced
{
public:
@@ -283,7 +269,7 @@ public:
* Place time stamps at strategic points in the execution of subsystems
* update() member functions. Predominantly for debugging purposes.
*/
- void stamp(string name);
+ void stamp(const std::string& name);
@@ -318,21 +304,27 @@ public:
virtual void resume ();
virtual bool is_suspended () const;
- virtual void set_subsystem (const string &name,
+ virtual void set_subsystem (const std::string &name,
SGSubsystem * subsystem,
double min_step_sec = 0);
- virtual SGSubsystem * get_subsystem (const string &name);
- virtual void remove_subsystem (const string &name);
- virtual bool has_subsystem (const string &name) const;
+ virtual SGSubsystem * get_subsystem (const std::string &name);
+ virtual void remove_subsystem (const std::string &name);
+ virtual bool has_subsystem (const std::string &name) const;
void collectDebugTiming(bool collect);
+ /**
+ *
+ */
+ void set_fixed_update_time(double fixed_dt);
private:
- struct Member {
+ class Member {
- Member ();
+ private:
Member (const Member &member);
+ public:
+ Member ();
virtual ~Member ();
virtual void update (double delta_time_sec);
@@ -343,16 +335,20 @@ private:
void collectDebugTiming (bool collect) { collectTimeStats = collect; };
SampleStatistic timeStat;
- string name;
+ std::string name;
SGSubsystem * subsystem;
double min_step_sec;
double elapsed_sec;
bool collectTimeStats;
+ int exceptionCount;
};
- Member * get_member (const string &name, bool create = false);
+ Member * get_member (const std::string &name, bool create = false);
- vector _members;
+ std::vector _members;
+
+ double _fixedUpdateTime;
+ double _updateTimeRemainder;
};
@@ -384,6 +380,9 @@ public:
enum GroupType {
INIT = 0,
GENERAL,
+ FDM, ///< flight model, autopilot, instruments that run coupled
+ POST_FDM, ///< certain subsystems depend on FDM data
+ DISPLAY, ///< view, camera, rendering updates
MAX_GROUPS
};
@@ -405,16 +404,24 @@ public:
GroupType group = GENERAL,
double min_time_sec = 0);
+ /**
+ * remove a subsystem, and return a pointer to it.
+ * returns NULL if the subsystem was not found.
+ */
+ virtual SGSubsystem* remove(const char* name);
+
virtual SGSubsystemGroup * get_group (GroupType group);
- virtual SGSubsystem * get_subsystem(const string &name);
+ virtual SGSubsystem * get_subsystem(const std::string &name) const;
void collectDebugTiming(bool collect);
private:
SGSubsystemGroup _groups[MAX_GROUPS];
- map _subsystem_map;
+
+ typedef std::map SubsystemDict;
+ SubsystemDict _subsystem_map;
};