X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fstructure%2Fevent_mgr.hxx;h=5b31c8095bf168b8853f7bb6fe7b6607e917a4ff;hb=200df49d6e2d8896e1deaa6da7af5b4a91058a4f;hp=4c89b06022da3851df8217cf5d24b45ef969856a;hpb=de1a5f3034e38df01fa8005fa63e55e6db204fd5;p=simgear.git diff --git a/simgear/structure/event_mgr.hxx b/simgear/structure/event_mgr.hxx index 4c89b060..5b31c809 100644 --- a/simgear/structure/event_mgr.hxx +++ b/simgear/structure/event_mgr.hxx @@ -9,6 +9,7 @@ class SGEventMgr; struct SGTimer { + std::string name; double interval; SGCallback* callback; SGEventMgr* mgr; @@ -33,6 +34,7 @@ public: SGTimer* nextTimer() { return _numEntries ? _table[0].timer : 0; } double nextTime() { return -_table[0].pri; } + SGTimer* findByName(const std::string& name) const; private: // The "priority" is stored as a negative time. This allows the // implemenetation to treat the "top" of the heap as the largest @@ -51,7 +53,9 @@ private: void siftDown(int n); void siftUp(int n); void growArray(); - void check(); + + // gcc complains there is no function specification anywhere. + // void check(); double _now; HeapEntry *_table; @@ -62,60 +66,63 @@ private: class SGEventMgr : public SGSubsystem { public: - SGEventMgr() { _freezeProp = 0; } - ~SGEventMgr() { _freezeProp = 0; } + SGEventMgr() { _rtProp = 0; } + ~SGEventMgr() { _rtProp = 0; } virtual void init() {} virtual void update(double delta_time_sec); - void setFreezeProperty(SGPropertyNode* node) { _freezeProp = node; } + void setRealtimeProperty(SGPropertyNode* node) { _rtProp = node; } /** * Add a single function callback event as a repeating task. * ex: addTask("foo", &Function ... ) */ template - inline void addTask(const char* name, const FUNC& f, + inline void addTask(const std::string& name, const FUNC& f, double interval, double delay=0, bool sim=false) - { add(make_callback(f), interval, delay, true, sim); } + { add(name, make_callback(f), interval, delay, true, sim); } /** * Add a single function callback event as a one-shot event. * ex: addEvent("foo", &Function ... ) */ template - inline void addEvent(const char* name, const FUNC& f, + inline void addEvent(const std::string& name, const FUNC& f, double delay, bool sim=false) - { add(make_callback(f), 0, delay, false, sim); } + { add(name, make_callback(f), 0, delay, false, sim); } /** * Add a object/method pair as a repeating task. * ex: addTask("foo", &object, &ClassName::Method, ...) */ template - inline void addTask(const char* name, + inline void addTask(const std::string& name, const OBJ& o, METHOD m, double interval, double delay=0, bool sim=false) - { add(make_callback(o,m), interval, delay, true, sim); } + { add(name, make_callback(o,m), interval, delay, true, sim); } /** * Add a object/method pair as a repeating task. * ex: addEvent("foo", &object, &ClassName::Method, ...) */ template - inline void addEvent(const char* name, + inline void addEvent(const std::string& name, const OBJ& o, METHOD m, double delay, bool sim=false) - { add(make_callback(o,m), 0, delay, false, sim); } + { add(name, make_callback(o,m), 0, delay, false, sim); } + + void removeTask(const std::string& name); private: friend struct SGTimer; - void add(SGCallback* cb, + void add(const std::string& name, SGCallback* cb, double interval, double delay, bool repeat, bool simtime); - SGPropertyNode* _freezeProp; + SGPropertyNode_ptr _freezeProp; + SGPropertyNode_ptr _rtProp; SGTimerQueue _rtQueue; SGTimerQueue _simQueue; };