+++ /dev/null
-
-/*] Copyright (c) 2009-2010, Charles McGarvey [**************************
-**] All rights reserved.
-*
-* vi:ts=4 sw=4 tw=75
-*
-* Distributable under the terms and conditions of the 2-clause BSD license;
-* see the file COPYING for a complete text of the license.
-*
-**************************************************************************/
-
-#ifndef _MOOF_TIMER_HH_
-#define _MOOF_TIMER_HH_
-
-/**
- * @file Timer.hh
- * Functions for measuring time in a friendly unit.
- */
-
-#include <map>
-
-#include <boost/bind.hpp>
-#include <boost/function.hpp>
-
-#include <Moof/Math.hh>
-
-
-namespace Mf {
-
-
-class Timer
-{
-public:
-
- enum Mode
- {
- INVALID = -1,
- NORMAL = 0,
- ACTUAL = 1,
- REPEAT = 2
- };
-
- typedef boost::function<void(Timer&,Scalar)> Function;
-
-
- Timer() :
- mMode(INVALID) {}
-
- Timer(const Function& function, Scalar seconds, Mode mode = NORMAL)
- {
- init(function, seconds, mode);
- }
-
- ~Timer()
- {
- invalidate();
- }
-
- void init(const Function& function, Scalar seconds,
- Mode mode = NORMAL);
-
- bool isValid() const;
- void invalidate();
-
- void fire();
-
- Scalar getSecondsRemaining() const;
- bool isExpired() const;
- bool isRepeating() const;
-
-
- /**
- * Get the number of seconds since a fixed, arbitrary point in the
- * past.
- * @return Seconds.
- */
-
- static Scalar getTicks();
-
-
- /**
- * Put the thread to sleep for a certain period of time. If absolute
- * is true, then it will sleep until seconds after the fixed time in
- * the past. If absolute is false, it will sleep for seconds starting
- * now. Unlike system sleep functions, this one automatically resumes
- * sleep if sleep was interrupted by a signal. Therefore, calling this
- * function is guaranteed to sleep for the requested amount of time
- * (and maybe longer).
- */
-
- static void sleep(Scalar seconds, Mode mode = NORMAL);
-
-
- static Scalar getNextFire()
- {
- return gNextFire;
- }
-
- static void fireIfExpired();
- static void fireIfExpired(Scalar t);
-
-private:
-
- static unsigned getNewID();
- static Scalar findNextFire();
-
- Function mFunction;
- Mode mMode;
- Scalar mAbsolute;
- Scalar mInterval;
- unsigned mId;
-
- static Scalar gNextFire;
- static std::map<unsigned,Timer*> gTimers;
-};
-
-
-} // namespace Mf
-
-#endif // _MOOF_TIMER_HH_
-