summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root>2007-12-14 17:47:52 +0000
committerroot <root>2007-12-14 17:47:52 +0000
commitdfa948951dd77048e8b05540d86c4ffe1a0205d2 (patch)
tree3cd63ccbe0f8cadc02e24d1b1af6be6d8fbc3120
parentfc57824a79588a1adced09953b2a22b87ac9c9f6 (diff)
*** empty log message ***
-rw-r--r--ev++.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/ev++.h b/ev++.h
index 604340e..ac63970 100644
--- a/ev++.h
+++ b/ev++.h
@@ -28,6 +28,7 @@ namespace ev {
ev_set_cb (static_cast<ev_watcher *>(this), cb);
}
+ // method callback
template<class K, void (K::*method)(watcher &w, int)>
void set (K *object)
{
@@ -41,6 +42,7 @@ namespace ev {
(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)
{
@@ -54,6 +56,7 @@ namespace ev {
(static_cast<K *>(w->data)->*method) (*static_cast<watcher *>(w), revents);
}
+ // function callback
template<void (*function)(watcher &w, int)>
void set (void *data = 0)
{
@@ -66,6 +69,20 @@ namespace ev {
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)
{
return ev_cb (static_cast<ev_watcher *>(this))