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<watcher *>(this), cb);
+ ev_set_cb (static_cast<ev_watcher *>(this), cb);
}
+ // method callback
template<class K, void (K::*method)(watcher &w, int)>
void set (K *object)
{
}
template<class K, void (K::*method)(watcher &w, int)>
- 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<K *>(w->data);
- (obj->*method) (*w, revents);
+ (obj->*method) (*static_cast<watcher *>(w), revents);
}
+ // const method callback
template<class K, void (K::*method)(watcher &w, int) const>
void set (const K *object)
{
}
template<class K, void (K::*method)(watcher &w, int) const>
- 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<K *>(w->data);
- (obj->*method) (*w, revents);
+ (static_cast<K *>(w->data)->*method) (*static_cast<watcher *>(w), revents);
}
+ // function callback
template<void (*function)(watcher &w, int)>
void set (void *data = 0)
{
}
template<void (*function)(watcher &w, int)>
- static void function_thunk (EV_P_ watcher *w, int revents)
+ static void function_thunk (EV_P_ ev_watcher *w, int revents)
{
- function (*w, revents);
+ function (*static_cast<watcher *>(w), revents);
+ }
+
+ // simple callback
+ template<class K, void (K::*method)()>
+ void set (K *object)
+ {
+ set_ (object, method_noargs_thunk<K, method>);
+ }
+
+ template<class K, void (K::*method)()>
+ static void method_noargs_thunk (EV_P_ ev_watcher *w, int revents)
+ {
+ K *obj = static_cast<K *>(w->data);
+ (obj->*method) ();
}
void operator ()(int events = EV_UNDEF)