X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FScheduler.hh;h=a54bed8444ff949e0702d3bfc05eca6aa3bf8c9f;hb=0fff17bd2bcdbb1e91e216bf6e1bebc414713548;hp=e731db4b499b06f0d5604174a48dc2f0cdcfda46;hpb=c52cd7d87dbb525c1267aad27391b8b7365dbb57;p=senf.git diff --git a/Scheduler/Scheduler.hh b/Scheduler/Scheduler.hh index e731db4..a54bed8 100644 --- a/Scheduler/Scheduler.hh +++ b/Scheduler/Scheduler.hh @@ -20,20 +20,30 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// TODO: Fix EventId parameter (probably to int) to allow |-ing without casting ... + + +/** \mainpage The SENF Scheduler library + + */ + #ifndef HH_Scheduler_ #define HH_Scheduler_ 1 // Custom includes #include +#include #include #include #include +#include "Utils/MicroTime.hh" + //#include "scheduler.mpp" ///////////////////////////////hh.p//////////////////////////////////////// -namespace satcom { -namespace lib { +/** \brief SENF Project namespace */ +namespace senf { /** \brief Singleton class to manage the event loop @@ -59,7 +69,8 @@ namespace lib { typedef boost::function::param_type, EventId) > Callback; }; - typedef GenericCallback::Callback Callback; + typedef boost::function SimpleCallback; + typedef boost::function TimerCallback; /////////////////////////////////////////////////////////////////////////// ///\name Structors and default members @@ -76,44 +87,62 @@ namespace lib { ///@} /////////////////////////////////////////////////////////////////////////// - void add(int fd, Callback const & cb, EventId eventMask = EV_ALL); - void remove(int fd, EventId eventMask = EV_ALL); - template void add(Handle const & handle, typename GenericCallback::Callback const & cb, - EventId eventMask = EV_ALL); - template - void remove(Handle const & handle, EventId eventMask = EV_ALL); + int eventMask = EV_ALL); + template + void remove(Handle const & handle, int eventMask = EV_ALL); - void process(); + void timeout(unsigned long timeout, TimerCallback const & cb); + void process(); void terminate(); protected: private: Scheduler(); + + void do_add(int fd, SimpleCallback const & cb, int eventMask = EV_ALL); + void do_remove(int fd, int eventMask = EV_ALL); - struct EventSpec + struct EventSpec { - Callback cb_read; - Callback cb_prio; - Callback cb_write; - Callback cb_hup; - Callback cb_err; + SimpleCallback cb_read; + SimpleCallback cb_prio; + SimpleCallback cb_write; + SimpleCallback cb_hup; + SimpleCallback cb_err; int epollMask() const; }; + + struct TimerSpec + { + TimerSpec() : timeout(), cb() {} + TimerSpec(unsigned long long timeout_, TimerCallback cb_) + : timeout(timeout_), cb(cb_) {} + + bool operator< (TimerSpec const & other) const + { return timeout > other.timeout; } + + unsigned long long timeout; + TimerCallback cb; + }; typedef std::map FdTable; + typedef std::priority_queue TimerQueue; FdTable fdTable_; + TimerQueue timerQueue_; int epollFd_; bool terminate_; }; -}} + int retrieve_filehandle(int fd); + +} ///////////////////////////////hh.e//////////////////////////////////////// #include "Scheduler.cci" @@ -124,5 +153,5 @@ namespace lib { // Local Variables: // mode: c++ -// c-file-style: "satcom" +// c-file-style: "senf" // End: