00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef POLLER_H
00028 #define POLLER_H
00029
00030 #include "poller_util.h"
00031
00033 namespace fpoller {
00034 extern const short WRITE;
00035 extern const short READ;
00036
00040 template<typename Delegate>
00041 class basic_poller {
00042 private:
00043 Delegate delegate_;
00044 public:
00046 basic_poller():delegate_(){}
00048 void add(int fd,short interest, callback * cb){ delegate_.add(fd,interest,cb); }
00050 void remove(int fd,short interest){ delegate_.remove(fd,interest); }
00052 void remove(int fd){ remove(fd,WRITE); remove(fd,READ); }
00055 int poll(int timeout){return delegate_.poll(timeout);}
00056 };
00057 }
00058
00059 #include "poller_generic.h"
00060 namespace fpoller {
00062 typedef basic_poller<poller_generic> traditional_poller;
00063 }
00064
00065 #ifdef POLLER_DEVPOLL
00066 #include "poller_devpoll.h"
00067 namespace fpoller {
00068 typedef basic_poller<poller_devpoll> fast_poller;
00069 typedef fast_poller poller;
00070 }
00071 #endif
00072
00073 #ifdef POLLER_KQUEUE
00074 #include "poller_kqueue.h"
00075 namespace fpoller {
00076 typedef basic_poller<poller_kqueue> fast_poller;
00077 typedef fast_poller poller;
00078 }
00079 #endif
00080
00081 #ifndef POLLER_KQUEUE
00082 #ifndef POLLER_DEVPOLL
00083 namespace fpoller{
00088 typedef traditional_poller poller;
00089 }
00090 #endif
00091 #endif
00092
00093 #endif //POLLER_H
00094
00095
00096
00097
00098
00099