]> git.llucax.com Git - software/libev.git/blobdiff - ev++.h
fix some aliasing issues again
[software/libev.git] / ev++.h
diff --git a/ev++.h b/ev++.h
index fea0ac170ee85850d318d50d643a8ee5acbf14f9..604340e19d9e5a84f49dca6783478bfce2bd5abc 100644 (file)
--- a/ev++.h
+++ b/ev++.h
@@ -22,9 +22,9 @@ namespace ev {
       ev_init (this, 0);
     }
 
       ev_init (this, 0);
     }
 
-    void set_ (void *object, void (*cb)(EV_P_ 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<ev_watcher *>(this), cb);
     }
 
       ev_set_cb (static_cast<ev_watcher *>(this), cb);
     }
 
@@ -37,9 +37,8 @@ namespace ev {
     template<class K, void (K::*method)(watcher &w, int)>
     static void method_thunk (EV_P_ ev_watcher *w, int revents)
     {
     template<class K, void (K::*method)(watcher &w, int)>
     static void method_thunk (EV_P_ ev_watcher *w, int revents)
     {
-      watcher *self = static_cast<watcher *>(w);
-      K *obj = static_cast<K *>(self->data);
-      (obj->*method) (*self, revents);
+      K *obj = static_cast<K *>(w->data);
+      (obj->*method) (*static_cast<watcher *>(w), revents);
     }
 
     template<class K, void (K::*method)(watcher &w, int) const>
     }
 
     template<class K, void (K::*method)(watcher &w, int) const>
@@ -51,13 +50,12 @@ namespace ev {
     template<class K, void (K::*method)(watcher &w, int) const>
     static void const_method_thunk (EV_P_ ev_watcher *w, int revents)
     {
     template<class K, void (K::*method)(watcher &w, int) const>
     static void const_method_thunk (EV_P_ ev_watcher *w, int revents)
     {
-      watcher *self = static_cast<watcher *>(w);
-      K *obj = static_cast<K *>(self->data);
-      (obj->*method) (*self, revents);
+      K *obj = static_cast<K *>(w->data);
+      (static_cast<K *>(w->data)->*method) (*static_cast<watcher *>(w), revents);
     }
 
     }
 
-    template<void (*function)(watcher &w, int), void *data = 0>
-    void set ()
+    template<void (*function)(watcher &w, int)>
+    void set (void *data = 0)
     {
       set_ (data, function_thunk<function>);
     }
     {
       set_ (data, function_thunk<function>);
     }
@@ -65,8 +63,7 @@ namespace ev {
     template<void (*function)(watcher &w, int)>
     static void function_thunk (EV_P_ ev_watcher *w, int revents)
     {
     template<void (*function)(watcher &w, int)>
     static void function_thunk (EV_P_ ev_watcher *w, int revents)
     {
-      watcher *self = static_cast<watcher *>(w);
-      function (*self, revents);
+      function (*static_cast<watcher *>(w), revents);
     }
 
     void operator ()(int events = EV_UNDEF)
     }
 
     void operator ()(int events = EV_UNDEF)