summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ev++.C17
-rw-r--r--ev++.h46
2 files changed, 27 insertions, 36 deletions
diff --git a/ev++.C b/ev++.C
deleted file mode 100644
index d053c89..0000000
--- a/ev++.C
+++ /dev/null
@@ -1,17 +0,0 @@
-#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); }
- }
-}
-
diff --git a/ev++.h b/ev++.h
index 500d596..48c3a93 100644
--- a/ev++.h
+++ b/ev++.h
@@ -93,9 +93,9 @@ namespace ev {
/* 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> \
{ \
@@ -143,7 +143,15 @@ namespace ev {
\
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 ();
@@ -165,9 +173,9 @@ namespace ev {
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 ();
@@ -186,10 +194,10 @@ namespace ev {
{
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 ();
@@ -208,19 +216,19 @@ namespace ev {
{
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 ();
@@ -234,9 +242,9 @@ namespace ev {
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 ();
@@ -250,10 +258,10 @@ namespace ev {
set (pid);
start ();
}
- };
+ EV_END_WATCHER (child, child)
#undef EV_CONSTRUCT
- #undef EV_DECLARE_WATCHER
+ #undef EV_BEGIN_WATCHER
}
#endif