/** \file
\brief FdDispatcher internal header */
-#ifndef IH_FdDispatcher_
-#define IH_FdDispatcher_ 1
+#ifndef IH_SENF_Scheduler_FdEvent_
+#define IH_SENF_Scheduler_FdEvent_ 1
// Custom includes
#include "../boost/intrusive/iset.hpp"
///////////////////////////////ih.p////////////////////////////////////////
namespace senf {
+namespace scheduler {
- class Scheduler;
+ void restart();
-namespace scheduler {
namespace detail {
struct FdSetCompare {
- bool operator()(FdEvent const & a, FdEvent const & b) const
- { return a.fd_ < b.fd_; }
+ bool operator()(FdEvent const & a, FdEvent const & b) const
+ { return a.fd_ < b.fd_; }
};
struct FindFd {
- bool operator()(FdEvent const & a, int b) const
- { return a.fd_ < b; }
- bool operator()(int a, FdEvent const & b) const
- { return a < b.fd_; }
+ bool operator()(FdEvent const & a, int b) const
+ { return a.fd_ < b; }
+ bool operator()(int a, FdEvent const & b) const
+ { return a < b.fd_; }
};
class FdDispatcher
- : public senf::singleton<FdDispatcher>
+ : public senf::singleton<FdDispatcher>
{
public:
- using senf::singleton<FdDispatcher>::instance;
- using senf::singleton<FdDispatcher>::alive;
-
+ using senf::singleton<FdDispatcher>::instance;
+ using senf::singleton<FdDispatcher>::alive;
+
bool add(FdEvent & event);
void remove(FdEvent & event);
FdDispatcher();
~FdDispatcher();
- typedef boost::intrusive::imultiset< FdSetBase::value_traits<FdEvent>,
- FdSetCompare,
- false > FdSet;
+ typedef boost::intrusive::imultiset< FdSetBase::value_traits<FdEvent>,
+ FdSetCompare,
+ false > FdSet;
FdSet fds_;
- friend class senf::Scheduler;
+ friend void senf::scheduler::restart();
friend class singleton<FdDispatcher>;
friend class senf::scheduler::FdEvent;
};
class FileDispatcher
- : public senf::singleton<FileDispatcher>
+ : public senf::singleton<FileDispatcher>
{
public:
- using senf::singleton<FileDispatcher>::instance;
- using senf::singleton<FileDispatcher>::alive;
+ using senf::singleton<FileDispatcher>::instance;
+ using senf::singleton<FileDispatcher>::alive;
void add(FdEvent & event);
void remove(FdEvent & event);
// We really only need a list here but we need to use the same event structure used by
// the FdEvent.
- typedef boost::intrusive::imultiset< FdSetBase::value_traits<FdEvent>,
- FdSetCompare,
- false > FdSet;
+ typedef boost::intrusive::imultiset< FdSetBase::value_traits<FdEvent>,
+ FdSetCompare,
+ false > FdSet;
FdSet fds_;
int managerTimeout_;
- friend class senf::Scheduler;
+ friend void senf::scheduler::restart();
friend class singleton<FileDispatcher>;
};
+ template <class Handle>
+ int get_descriptor(Handle const & handle);
+
+ int retrieve_filehandle(int fd);
+
}}}
///////////////////////////////ih.e////////////////////////////////////////