X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FScheduler.cci;h=f8a565eb0c82b7b65757f40ab3775075067aaca5;hb=40fa3e3f1e0f639c68bd15bf469e35045f94abee;hp=f436274e54bb4f3d72a188958b5da3c1c9e10916;hpb=e8a31ca63d661c8dd5402025c771b87798094a93;p=senf.git diff --git a/Scheduler/Scheduler.cci b/Scheduler/Scheduler.cci index f436274..f8a565e 100644 --- a/Scheduler/Scheduler.cci +++ b/Scheduler/Scheduler.cci @@ -27,54 +27,100 @@ //#include "Scheduler.ih" // Custom includes +#include #define prefix_ inline ///////////////////////////////cci.p/////////////////////////////////////// +// private members + +prefix_ void senf::Scheduler::do_add(int fd, FdCallback const & cb, int eventMask) +{ + do_add((boost::format("") % fd).str(), fd, cb, eventMask); +} + +prefix_ void senf::Scheduler::do_add(std::string const & name, int fd, FdCallback const & cb, + int eventMask) +{ + if (! fdDispatcher_.add(name, fd, cb, eventMask)) + fileDispatcher_.add(name, fd, cb, eventMask); +} + +prefix_ void senf::Scheduler::do_remove(int fd, int eventMask) +{ + // We don't know, where the descriptor is registered. However, this is no problem since removing + // a non-registered fd is a no-opp + fdDispatcher_.remove(fd, eventMask); + fileDispatcher_.remove(fd, eventMask); +} + +// public members + prefix_ senf::Scheduler::Scheduler & senf::Scheduler::instance() { static Scheduler instance; return instance; } -prefix_ unsigned senf::Scheduler::timeout(ClockService::clock_type timeout, - SimpleCallback const & cb) +prefix_ int senf::retrieve_filehandle(int fd) +{ + return fd; +} + +prefix_ senf::Scheduler::timer_id senf::Scheduler::timeout(ClockService::clock_type timeout, + SimpleCallback const & cb) +{ + return timerDispatcher_.add("", timeout, cb); +} + +prefix_ senf::Scheduler::timer_id senf::Scheduler::timeout(std::string const & name, + ClockService::clock_type timeout, + SimpleCallback const & cb) { - ++ timerIdCounter_; - TimerMap::iterator i ( - timerMap_.insert(std::make_pair(timerIdCounter_, - TimerSpec(timeout,cb,timerIdCounter_))).first); - timerQueue_.push(i); - return timerIdCounter_; + return timerDispatcher_.add(name, timeout, cb); } -prefix_ void senf::Scheduler::cancelTimeout(unsigned id) +prefix_ void senf::Scheduler::cancelTimeout(timer_id id) { - TimerMap::iterator i (timerMap_.find(id)); - if (i != timerMap_.end()) - i->second.canceled = true; + timerDispatcher_.remove(id); } prefix_ senf::ClockService::clock_type senf::Scheduler::timeoutEarly() const { - return eventEarly_; + SENF_LOG( (senf::log::IMPORTANT) + ("timeoutEarly() is deprecated and a no-op. It will be removed") ); + return 0; } prefix_ void senf::Scheduler::timeoutEarly(ClockService::clock_type v) { - eventEarly_ = v; + SENF_LOG( (senf::log::IMPORTANT) + ("timeoutEarly() is deprecated and a no-op. It will be removed") ); } prefix_ senf::ClockService::clock_type senf::Scheduler::timeoutAdjust() const { - return eventAdjust_; + SENF_LOG( (senf::log::IMPORTANT) + ("timeoutAdjust() is deprecated and a no-op. It will be removed") ); + return 0; } prefix_ void senf::Scheduler::timeoutAdjust(ClockService::clock_type v) { - eventAdjust_ = v; + SENF_LOG( (senf::log::IMPORTANT) + ("timeoutAdjust() is deprecated and a no-op. It will be removed") ); +} + +prefix_ void senf::Scheduler::registerSignal(unsigned signal, SignalCallback const & cb) +{ + signalDispatcher_.add(signal, cb); +} + +prefix_ void senf::Scheduler::unregisterSignal(unsigned signal) +{ + signalDispatcher_.remove(signal); } prefix_ void senf::Scheduler::terminate() @@ -85,19 +131,22 @@ prefix_ void senf::Scheduler::terminate() prefix_ senf::ClockService::clock_type senf::Scheduler::eventTime() const { - return eventTime_; + return manager_.eventTime(); } -prefix_ int senf::retrieve_filehandle(int fd) +prefix_ unsigned senf::Scheduler::hangCount() + const { - return fd; + return runner_.hangCount(); } -prefix_ senf::Scheduler::TimerSpecCompare::result_type -senf::Scheduler::TimerSpecCompare::operator()(first_argument_type a, second_argument_type b) -{ - return a->second < b->second; -} +prefix_ senf::Scheduler::Scheduler() + : terminate_ (false), + fdDispatcher_ (manager_, runner_), + timerDispatcher_ (manager_, runner_), + signalDispatcher_ (manager_, runner_), + fileDispatcher_ (manager_, runner_) +{} ///////////////////////////////cci.e/////////////////////////////////////// #undef prefix_