X-Git-Url: https://git.llucax.com/software/libev.git/blobdiff_plain/57e6fe17689de1646a53a20a46374936391db3e2..f3aa86bc9a0bc4af285ac341b8edf2ff09309f67:/ev%20%20.h/software/libev.git/blobdiff_plain/57e6fe17689de1646a53a20a46374936391db3e2..f3aa86bc9a0bc4af285ac341b8edf2ff09309f67:/ev++.h diff --git a/ev++.h b/ev++.h index 71a3d52..f535515 100644 --- a/ev++.h +++ b/ev++.h @@ -1,7 +1,11 @@ #ifndef EVPP_H__ #define EVPP_H__ -#include "ev.h" +#ifdef EV_H +# include EV_H +#else +# include +#endif namespace ev { @@ -22,12 +26,13 @@ namespace ev { ev_init (this, 0); } - void set_ (void *data, void (*cb)(EV_P_ watcher *w, int revents)) + void set_ (void *data, void (*cb)(EV_P_ ev_watcher *w, int revents)) { this->data = data; - ev_set_cb (static_cast(this), cb); + ev_set_cb (static_cast(this), cb); } + // method callback template void set (K *object) { @@ -35,12 +40,13 @@ namespace ev { } template - static void method_thunk (EV_P_ watcher *w, int revents) + static void method_thunk (EV_P_ ev_watcher *w, int revents) { K *obj = static_cast(w->data); - (obj->*method) (*w, revents); + (obj->*method) (*static_cast(w), revents); } + // const method callback template void set (const K *object) { @@ -48,12 +54,13 @@ namespace ev { } template - static void const_method_thunk (EV_P_ watcher *w, int revents) + static void const_method_thunk (EV_P_ ev_watcher *w, int revents) { K *obj = static_cast(w->data); - (obj->*method) (*w, revents); + (static_cast(w->data)->*method) (*static_cast(w), revents); } + // function callback template void set (void *data = 0) { @@ -61,9 +68,23 @@ namespace ev { } template - static void function_thunk (EV_P_ watcher *w, int revents) + static void function_thunk (EV_P_ ev_watcher *w, int revents) + { + function (*static_cast(w), revents); + } + + // simple callback + template + void set (K *object) { - function (*w, revents); + set_ (object, method_noargs_thunk); + } + + template + static void method_noargs_thunk (EV_P_ ev_watcher *w, int revents) + { + K *obj = static_cast(w->data); + (obj->*method) (); } void operator ()(int events = EV_UNDEF)