]> git.mxchange.org Git - simgear.git/commitdiff
Minor event manager clean-up/simplification.
authorThorstenB <brehmt@gmail.com>
Sun, 3 Apr 2011 15:39:23 +0000 (17:39 +0200)
committerThorstenB <brehmt@gmail.com>
Sun, 3 Apr 2011 16:22:39 +0000 (18:22 +0200)
(Mainly disliked the "delete this;" concept :) ).

simgear/structure/event_mgr.cxx
simgear/structure/event_mgr.hxx

index 6753a38f41de7cf5b22e0b3160911cefb9441f6e..63e4672faaeb0a95212cb39760af5925dc050619 100644 (file)
@@ -14,9 +14,7 @@ void SGEventMgr::add(const std::string& name, SGCallback* cb,
     SGTimer* t = new SGTimer;
     t->interval = interval;
     t->callback = cb;
-    t->mgr = this;
     t->repeat = repeat;
-    t->simtime = simtime;
     t->name = name;
     
     SGTimerQueue* q = simtime ? &_simQueue : &_rtQueue;
@@ -24,17 +22,15 @@ void SGEventMgr::add(const std::string& name, SGCallback* cb,
     q->insert(t, delay);
 }
 
+SGTimer::~SGTimer()
+{
+    delete callback;
+    callback = NULL;
+}
+
 void SGTimer::run()
 {
     (*callback)();
-
-    if(repeat) {
-        SGTimerQueue* q = simtime ? &mgr->_simQueue : &mgr->_rtQueue;
-        q->insert(this, interval);
-    } else {
-        delete callback;
-        delete this;
-    }
 }
 
 void SGEventMgr::update(double delta_time_sec)
@@ -99,6 +95,11 @@ void SGTimerQueue::update(double deltaSecs)
     while(_numEntries && nextTime() <= _now) {
         SGTimer* t = remove();
         t->run();
+        if(t->repeat) {
+            insert(t, t->interval);
+        } else {
+            delete t;
+        }
     }
 }
 
@@ -193,4 +194,3 @@ SGTimer* SGTimerQueue::findByName(const std::string& name) const
   
   return NULL;
 }
-
index 5b31c8095bf168b8853f7bb6fe7b6607e917a4ff..b68517aeeaaf4f650b66dd6aa9dc6b63b6b28a97 100644 (file)
@@ -8,14 +8,15 @@
 
 class SGEventMgr;
 
-struct SGTimer {
+class SGTimer {
+public:
+    ~SGTimer();
+    void run();
+    
     std::string name;
     double interval;
     SGCallback* callback;
-    SGEventMgr* mgr;
     bool repeat;
-    bool simtime;
-    void run();
 };
 
 class SGTimerQueue {
@@ -37,7 +38,7 @@ public:
     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
+    // implementation to treat the "top" of the heap as the largest
     // value and avoids developer mindbugs. ;)
     struct HeapEntry { double pri; SGTimer* timer; };