]> git.tdb.fi Git - libs/core.git/blobdiff - source/time/timer.h
Drop copyright and license notices from source files
[libs/core.git] / source / time / timer.h
index cfa00bb0d1511f42f09591b04dbc5527ee8deb91..403e484cba7376412ca0a068c58f908e258d1ff1 100644 (file)
@@ -1,13 +1,7 @@
-/*
-This file is part of libmspcore     
-Copyright © 2006  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef MSP_TIME_TIMER_H_
 #define MSP_TIME_TIMER_H_
 
-#include <queue>
+#include <vector>
 #include <sigc++/sigc++.h>
 #include "../core/mutex.h"
 #include "../core/semaphore.h"
@@ -41,18 +35,22 @@ public:
                Slot(const TimeStamp &);
                const TimeStamp &get_timeout() const { return timeout; }
                bool increment();
-               bool operator<(const Slot &) const;
        };
 
 private:
-       typedef bool (*fSlotCompare)(Slot *, Slot *);
+       struct SlotProxy
+       {
+               Slot *slot;
+
+               SlotProxy(Slot *);
+               bool operator<(const SlotProxy &) const;
+       };
 
-       std::priority_queue<Slot *, std::vector<Slot *>, fSlotCompare> slots;
+       std::vector<SlotProxy> slots;
        Semaphore sem;
        Mutex mutex;
 
 public:
-       Timer();
        ~Timer();
 
        /**
@@ -67,6 +65,11 @@ public:
        */
        Slot &add(const TimeStamp &);
 
+       /**
+       Cancels a previously added timer.
+       */
+       void cancel(Slot &);
+
        /**
        Checks all timers, executing any that have timed out.  If block is true,
        waits until one times out.
@@ -74,9 +77,9 @@ public:
        Note: If there are no active timers when a blocking tick is executed, it
        won't return until a timer is added from another thread.
        */
-       void tick(bool block=true);
-private:
-       static bool slot_compare(Slot *, Slot *);
+       void tick(bool block = true);
+
+       TimeStamp get_next_timeout() const;
 };
 
 } // namespace Time