#include "FdEvent.ih"
// Custom includes
+#include <sstream>
#include "../Utils/senfassert.hh"
//#include "FdEvent.mpp"
prefix_ senf::scheduler::detail::FdDispatcher::~FdDispatcher()
{
for (FdSet::iterator i (fds_.begin()); i != fds_.end(); ++i) {
- FdManager::instance().remove(i->fd_);
- FIFORunner::instance().dequeue(&(*i));
+ detail::FdManager::instance().remove(i->fd_);
+ detail::FIFORunner::instance().dequeue(&(*i));
}
}
if (event.events_ & events)
throw FdEvent::DuplicateEventRegistrationException();
- if (! FdManager::instance().set(event.fd_, events | event.events_, &event))
+ if (! detail::FdManager::instance().set(event.fd_, events | event.events_, &event))
return false;
- FIFORunner::instance().enqueue(&event);
+ detail::FIFORunner::instance().enqueue(&event);
fds_.insert(range.first, event);
return true;
prefix_ void senf::scheduler::detail::FdDispatcher::remove(FdEvent & event)
{
fds_.erase(FdSet::current(event));
- FIFORunner::instance().dequeue(&event);
+ detail::FIFORunner::instance().dequeue(&event);
std::pair<FdSet::iterator,FdSet::iterator> range (fds_.equal_range(event));
if (range.first == range.second)
- FdManager::instance().remove(event.fd_);
+ detail::FdManager::instance().remove(event.fd_);
else {
int events (0);
for (FdSet::iterator i (range.first); i != range.second; ++i)
events |= i->events_;
- FdManager::instance().set(event.fd_, events, &(*range.first));
+ detail::FdManager::instance().set(event.fd_, events, &(*range.first));
}
}
if (event.events_ & events)
throw FdEvent::DuplicateEventRegistrationException();
- FIFORunner::instance().enqueue(&event);
+ detail::FIFORunner::instance().enqueue(&event);
fds_.insert(range.first, event);
- FdManager::instance().timeout(0);
+ detail::FdManager::instance().timeout(0);
}
prefix_ senf::scheduler::detail::FileDispatcher::FileDispatcher()
- : managerTimeout_ (scheduler::FdManager::instance().timeout())
+ : managerTimeout_ (scheduler::detail::FdManager::instance().timeout())
{}
prefix_ senf::scheduler::detail::FileDispatcher::~FileDispatcher()
{
- FdManager::instance().timeout(-1);
+ detail::FdManager::instance().timeout(-1);
for (FdSet::iterator i (fds_.begin()); i != fds_.end(); ++i)
- FIFORunner::instance().dequeue(&(*i));
+ detail::FIFORunner::instance().dequeue(&(*i));
}
prefix_ void senf::scheduler::detail::FileDispatcher::prepareRun()
prefix_ void senf::scheduler::detail::FileDispatcher::remove(FdEvent & event)
{
fds_.erase(FdSet::current(event));
- FIFORunner::instance().dequeue(&event);
+ detail::FIFORunner::instance().dequeue(&event);
if (fds_.empty())
- FdManager::instance().timeout(managerTimeout_);
+ detail::FdManager::instance().timeout(managerTimeout_);
}
///////////////////////////////////////////////////////////////////////////
}
}
-prefix_ void senf::scheduler::FdEvent::run()
+prefix_ void senf::scheduler::FdEvent::v_run()
{
cb_(signaledEvents_);
}
+prefix_ char const * senf::scheduler::FdEvent::v_type()
+ const
+{
+ return "fd";
+}
+
+prefix_ std::string senf::scheduler::FdEvent::v_info()
+ const
+{
+ std::stringstream ss;
+
+ ss << "fd " << fd_;
+ if (! pollable_)
+ ss << " (NOT pollable)";
+ if (events_ & EV_READ)
+ ss << " READ";
+ if (events_ & EV_PRIO)
+ ss << " PRIO";
+ if (events_ & EV_WRITE)
+ ss << " WRITE";
+ return ss.str();
+}
+
///////////////////////////////cc.e////////////////////////////////////////
#undef prefix_
//#include "FdEvent.mpp"