--- libev/ev++.h 2007/12/04 17:08:05 1.14 +++ libev/ev++.h 2007/12/14 17:47:52 1.19 @@ -22,12 +22,13 @@ ev_init (this, 0); } - void set_ (void *object, void (*cb)(ev_watcher *w, int revents)) + void set_ (void *data, void (*cb)(EV_P_ ev_watcher *w, int revents)) { - this->data = object; + this->data = data; ev_set_cb (static_cast(this), cb); } + // method callback template void set (K *object) { @@ -35,13 +36,13 @@ } template - static void method_thunk (ev_watcher *w, int revents) + static void method_thunk (EV_P_ ev_watcher *w, int revents) { - watcher *self = static_cast(w); - K *obj = static_cast(self->data); - (obj->*method) (*self, revents); + K *obj = static_cast(w->data); + (obj->*method) (*static_cast(w), revents); } + // const method callback template void set (const K *object) { @@ -49,24 +50,37 @@ } template - static void const_method_thunk (ev_watcher *w, int revents) + static void const_method_thunk (EV_P_ ev_watcher *w, int revents) { - watcher *self = static_cast(w); - K *obj = static_cast(self->data); - (obj->*method) (*self, revents); + K *obj = static_cast(w->data); + (static_cast(w->data)->*method) (*static_cast(w), revents); } + // function callback template - void set () + void set (void *data = 0) { - set_ (0, function_thunk); + set_ (data, function_thunk); } template - static void function_thunk (ev_watcher *w, int revents) + static void function_thunk (EV_P_ ev_watcher *w, int revents) { - watcher *self = static_cast(w); - function (*self, revents); + function (*static_cast(w), revents); + } + + // simple callback + template + void set (K *object) + { + 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)