+++ /dev/null
-#include "ev++.h"
-
-namespace ev {
- extern "C" {
- void cb_io (struct ev_io *w, int revents) { (*static_cast<io *>(w))(revents); }
- void cb_timer (struct ev_timer *w, int revents) { (*static_cast<timer *>(w))(revents); }
- #if EV_PERIODICS
- void cb_periodic (struct ev_periodic *w, int revents) { (*static_cast<periodic *>(w))(revents); }
- #endif
- void cb_idle (struct ev_idle *w, int revents) { (*static_cast<idle *>(w))(revents); }
- void cb_prepare (struct ev_prepare *w, int revents) { (*static_cast<prepare *>(w))(revents); }
- void cb_check (struct ev_check *w, int revents) { (*static_cast<check *>(w))(revents); }
- void cb_sig (struct ev_signal *w, int revents) { (*static_cast<sig *>(w))(revents); }
- void cb_child (struct ev_child *w, int revents) { (*static_cast<child *>(w))(revents); }
- }
-}
-
/* using a template here would require quite a bit more lines,
* so a macro solution was chosen */
- #define EV_DECLARE_WATCHER(cppstem,cstem) \
+ #define EV_BEGIN_WATCHER(cppstem,cstem) \
\
- extern "C" void cb_ ## cppstem (struct ev_ ## cstem *w, int revents); \
+ static void cb_ ## cppstem (struct ev_ ## cstem *w, int revents); \
\
struct cppstem : ev_ ## cstem, callback<cppstem> \
{ \
\
public:
- EV_DECLARE_WATCHER (io, io)
+ #define EV_END_WATCHER(cppstem,cstem) \
+ }; \
+ \
+ static void cb_ ## cppstem (struct ev_ ## cstem *w, int revents) \
+ { \
+ (*static_cast<cppstem *>(w))(revents); \
+ }
+
+ EV_BEGIN_WATCHER (io, io)
void set (int fd, int events)
{
int active = is_active ();
set (fd, events);
start ();
}
- };
+ EV_END_WATCHER (io, io)
- EV_DECLARE_WATCHER (timer, timer)
+ EV_BEGIN_WATCHER (timer, timer)
void set (ev_tstamp after, ev_tstamp repeat = 0.)
{
int active = is_active ();
{
ev_timer_again (EV_A_ static_cast<ev_timer *>(this));
}
- };
+ EV_END_WATCHER (timer, timer)
#if EV_PERIODICS
- EV_DECLARE_WATCHER (periodic, periodic)
+ EV_BEGIN_WATCHER (periodic, periodic)
void set (ev_tstamp at, ev_tstamp interval = 0.)
{
int active = is_active ();
{
ev_periodic_again (EV_A_ static_cast<ev_periodic *>(this));
}
- };
+ EV_END_WATCHER (periodic, periodic)
#endif
- EV_DECLARE_WATCHER (idle, idle)
- };
+ EV_BEGIN_WATCHER (idle, idle)
+ EV_END_WATCHER (idle, idle)
- EV_DECLARE_WATCHER (prepare, prepare)
- };
+ EV_BEGIN_WATCHER (prepare, prepare)
+ EV_END_WATCHER (prepare, prepare)
- EV_DECLARE_WATCHER (check, check)
- };
+ EV_BEGIN_WATCHER (check, check)
+ EV_END_WATCHER (check, check)
- EV_DECLARE_WATCHER (sig, signal)
+ EV_BEGIN_WATCHER (sig, signal)
void set (int signum)
{
int active = is_active ();
set (signum);
start ();
}
- };
+ EV_END_WATCHER (sig, signal)
- EV_DECLARE_WATCHER (child, child)
+ EV_BEGIN_WATCHER (child, child)
void set (int pid)
{
int active = is_active ();
set (pid);
start ();
}
- };
+ EV_END_WATCHER (child, child)
#undef EV_CONSTRUCT
- #undef EV_DECLARE_WATCHER
+ #undef EV_BEGIN_WATCHER
}
#endif