X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fstructure%2Fevent_mgr.hxx;h=5b31c8095bf168b8853f7bb6fe7b6607e917a4ff;hb=08ad449774b0b80dc19b7a55d82dc25a71ce1415;hp=66face68f05c2d6acf8f1815920fa59ee9da22ef;hpb=61f2f4b7618660e939be721b8bf425819657daa0;p=simgear.git diff --git a/simgear/structure/event_mgr.hxx b/simgear/structure/event_mgr.hxx index 66face68..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; @@ -75,48 +79,50 @@ public: * 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* _rtProp; + SGPropertyNode_ptr _freezeProp; + SGPropertyNode_ptr _rtProp; SGTimerQueue _rtQueue; SGTimerQueue _simQueue; };