--- /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_RUNLOOP_HH_
+#define _MOOF_RUNLOOP_HH_
+
+/**
+ * \file runloop.hh
+ * Thread timer management class.
+ */
+
+#include <set>
+
+#include <boost/noncopyable.hpp>
+
+#include <moof/backend.hh>
+#include <moof/thread.hh>
+
+
+namespace moof {
+
+
+// forward declarations
+class timer;
+
+
+/**
+ * A runloop is a loop with scheduled timers.
+ */
+class runloop
+{
+public:
+
+ /**
+ * Construct a runloop.
+ */
+ runloop() :
+ stop_(false),
+ thread_id_(0) {}
+
+ /**
+ * Deconstruct the runloop.
+ */
+ ~runloop();
+
+
+ /**
+ * Start running the runloop.
+ * \return The exit code.
+ */
+ int run();
+
+ /**
+ * Stop the runloop.
+ * \param code The exit code.
+ */
+ void stop(int code = 0);
+
+
+ /** Get the runloop of the current thread.
+ * \return The current runloop or 0 if none is running in the current
+ * thread.
+ */
+ static runloop* current();
+
+
+private:
+
+ friend class timer;
+
+ void add_timer(timer* timer);
+ void remove_timer(timer* timer);
+
+
+ bool stop_;
+ int code_;
+
+ typedef std::set<timer*> timer_table;
+ timer_table timers_;
+ timer_table::iterator timers_it_;
+
+#if ENABLE_THREADS
+ MOOF_DECLARE_MUTEX(timers_mutex_);
+ uint32_t thread_id_;
+#endif
+
+
+ backend backend_;
+};
+
+
+} // namespace moof
+
+#endif // _MOOF_RUNLOOP_HH_
+