]> git.llucax.com Git - software/libev.git/blobdiff - ev++.h
*** empty log message ***
[software/libev.git] / ev++.h
diff --git a/ev++.h b/ev++.h
index 604340e19d9e5a84f49dca6783478bfce2bd5abc..e44799835d0a89a60257f1631505d7fbaab2f49b 100644 (file)
--- a/ev++.h
+++ b/ev++.h
@@ -1,7 +1,50 @@
+/*
+ * libev simple C++ wrapper classes
+ *
+ * Copyright (c) 2007 Marc Alexander Lehmann <libev@schmorp.de>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modifica-
+ * tion, are permitted provided that the following conditions are met:
+ * 
+ *   1.  Redistributions of source code must retain the above copyright notice,
+ *       this list of conditions and the following disclaimer.
+ * 
+ *   2.  Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-
+ * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-
+ * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH-
+ * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * the GNU General Public License ("GPL") version 2 or any later version,
+ * in which case the provisions of the GPL are applicable instead of
+ * the above. If you wish to allow the use of your version of this file
+ * only under the terms of the GPL and not to allow others to use your
+ * version of this file under the BSD license, indicate your decision
+ * by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL. If you do not delete the
+ * provisions above, a recipient may use your version of this file under
+ * either the BSD or the GPL.
+ */
+
 #ifndef EVPP_H__
 #define EVPP_H__
 
 #ifndef EVPP_H__
 #define EVPP_H__
 
-#include "ev.h"
+#ifdef EV_H
+# include EV_H
+#else
+# include <ev.h>
+#endif
 
 namespace ev {
 
 
 namespace ev {
 
@@ -28,6 +71,7 @@ namespace ev {
       ev_set_cb (static_cast<ev_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)>
     void set (K *object)
     {
@@ -41,6 +85,7 @@ namespace ev {
       (obj->*method) (*static_cast<watcher *>(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>
     void set (const K *object)
     {
@@ -54,6 +99,7 @@ namespace ev {
       (static_cast<K *>(w->data)->*method) (*static_cast<watcher *>(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)>
     void set (void *data = 0)
     {
@@ -66,6 +112,20 @@ namespace ev {
       function (*static_cast<watcher *>(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)
     {
       return ev_cb (static_cast<ev_watcher *>(this))
     void operator ()(int events = EV_UNDEF)
     {
       return ev_cb (static_cast<ev_watcher *>(this))