*** empty log message ***
authorroot <root>
Wed, 5 Dec 2007 18:20:39 +0000 (18:20 +0000)
committerroot <root>
Wed, 5 Dec 2007 18:20:39 +0000 (18:20 +0000)
src/callback.h

index bf0c38b866298c2d2e50ce25fa58396ad128a096..620567bb9d99402beb707ca0b73bedea4e6e4af7 100644 (file)
@@ -36,30 +36,6 @@ struct callback<R ()>
 {
   typedef R (*ptr_type)(void *self);
 
-private:
-
-  void *self;
-  ptr_type func;
-
-protected:
-
-  template<typename method>
-  struct thunktype;
-
-  template<class klass>
-  struct thunktype<R (klass::*)>
-  {
-    typedef klass K;
-  };
-
-  template<class klass, R (klass::*method)()>
-  static R thunk (void *self)
-  {
-    klass *obj = static_cast<klass *>(self);
-    return (obj->*method) ();
-  }
-
-public:
   template<class K, R (K::*method)()>
   void set (K *object)
   {
@@ -76,37 +52,25 @@ public:
   {
     return call ();
   }
-};
-
-template<class R, class A1>
-struct callback<R (A1)>
-{
-  typedef R (*ptr_type)(void *self, A1);
 
 private:
 
   void *self;
   ptr_type func;
 
-protected:
-
-  template<typename method>
-  struct thunktype;
-
-  template<class klass>
-  struct thunktype<R (klass::*)>
-  {
-    typedef klass K;
-  };
-
-  template<class klass, R (klass::*method)(A1)>
-  static R thunk (void *self, A1 a1)
+  template<class klass, R (klass::*method)()>
+  static R thunk (void *self)
   {
     klass *obj = static_cast<klass *>(self);
-    return (obj->*method) (a1);
+    return (obj->*method) ();
   }
+};
+
+template<class R, class A1>
+struct callback<R (A1)>
+{
+  typedef R (*ptr_type)(void *self, A1);
 
-public:
   template<class K, R (K::*method)(A1)>
   void set (K *object)
   {
@@ -123,37 +87,25 @@ public:
   {
     return call (a1);
   }
-};
-
-template<class R, class A1, class A2>
-struct callback<R (A1, A2)>
-{
-  typedef R (*ptr_type)(void *self, A1, A2);
 
 private:
 
   void *self;
   ptr_type func;
 
-protected:
-
-  template<typename method>
-  struct thunktype;
-
-  template<class klass>
-  struct thunktype<R (klass::*)>
-  {
-    typedef klass K;
-  };
-
-  template<class klass, R (klass::*method)(A1, A2)>
-  static R thunk (void *self, A1 a1, A2 a2)
+  template<class klass, R (klass::*method)(A1)>
+  static R thunk (void *self, A1 a1)
   {
     klass *obj = static_cast<klass *>(self);
-    return (obj->*method) (a1, a2);
+    return (obj->*method) (a1);
   }
+};
+
+template<class R, class A1, class A2>
+struct callback<R (A1, A2)>
+{
+  typedef R (*ptr_type)(void *self, A1, A2);
 
-public:
   template<class K, R (K::*method)(A1, A2)>
   void set (K *object)
   {
@@ -170,37 +122,25 @@ public:
   {
     return call (a1, a2);
   }
-};
-
-template<class R, class A1, class A2, class A3>
-struct callback<R (A1, A2, A3)>
-{
-  typedef R (*ptr_type)(void *self, A1, A2, A3);
 
 private:
 
   void *self;
   ptr_type func;
 
-protected:
-
-  template<typename method>
-  struct thunktype;
-
-  template<class klass>
-  struct thunktype<R (klass::*)>
-  {
-    typedef klass K;
-  };
-
-  template<class klass, R (klass::*method)(A1, A2, A3)>
-  static R thunk (void *self, A1 a1, A2 a2, A3 a3)
+  template<class klass, R (klass::*method)(A1, A2)>
+  static R thunk (void *self, A1 a1, A2 a2)
   {
     klass *obj = static_cast<klass *>(self);
-    return (obj->*method) (a1, a2, a3);
+    return (obj->*method) (a1, a2);
   }
+};
+
+template<class R, class A1, class A2, class A3>
+struct callback<R (A1, A2, A3)>
+{
+  typedef R (*ptr_type)(void *self, A1, A2, A3);
 
-public:
   template<class K, R (K::*method)(A1, A2, A3)>
   void set (K *object)
   {
@@ -217,37 +157,25 @@ public:
   {
     return call (a1, a2, a3);
   }
-};
-
-template<class R, class A1, class A2, class A3, class A4>
-struct callback<R (A1, A2, A3, A4)>
-{
-  typedef R (*ptr_type)(void *self, A1, A2, A3, A4);
 
 private:
 
   void *self;
   ptr_type func;
 
-protected:
-
-  template<typename method>
-  struct thunktype;
-
-  template<class klass>
-  struct thunktype<R (klass::*)>
-  {
-    typedef klass K;
-  };
-
-  template<class klass, R (klass::*method)(A1, A2, A3, A4)>
-  static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4)
+  template<class klass, R (klass::*method)(A1, A2, A3)>
+  static R thunk (void *self, A1 a1, A2 a2, A3 a3)
   {
     klass *obj = static_cast<klass *>(self);
-    return (obj->*method) (a1, a2, a3, a4);
+    return (obj->*method) (a1, a2, a3);
   }
+};
+
+template<class R, class A1, class A2, class A3, class A4>
+struct callback<R (A1, A2, A3, A4)>
+{
+  typedef R (*ptr_type)(void *self, A1, A2, A3, A4);
 
-public:
   template<class K, R (K::*method)(A1, A2, A3, A4)>
   void set (K *object)
   {
@@ -264,37 +192,25 @@ public:
   {
     return call (a1, a2, a3, a4);
   }
-};
-
-template<class R, class A1, class A2, class A3, class A4, class A5>
-struct callback<R (A1, A2, A3, A4, A5)>
-{
-  typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5);
 
 private:
 
   void *self;
   ptr_type func;
 
-protected:
-
-  template<typename method>
-  struct thunktype;
-
-  template<class klass>
-  struct thunktype<R (klass::*)>
-  {
-    typedef klass K;
-  };
-
-  template<class klass, R (klass::*method)(A1, A2, A3, A4, A5)>
-  static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+  template<class klass, R (klass::*method)(A1, A2, A3, A4)>
+  static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4)
   {
     klass *obj = static_cast<klass *>(self);
-    return (obj->*method) (a1, a2, a3, a4, a5);
+    return (obj->*method) (a1, a2, a3, a4);
   }
+};
+
+template<class R, class A1, class A2, class A3, class A4, class A5>
+struct callback<R (A1, A2, A3, A4, A5)>
+{
+  typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5);
 
-public:
   template<class K, R (K::*method)(A1, A2, A3, A4, A5)>
   void set (K *object)
   {
@@ -311,37 +227,25 @@ public:
   {
     return call (a1, a2, a3, a4, a5);
   }
-};
-
-template<class R, class A1, class A2, class A3, class A4, class A5, class A6>
-struct callback<R (A1, A2, A3, A4, A5, A6)>
-{
-  typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6);
 
 private:
 
   void *self;
   ptr_type func;
 
-protected:
-
-  template<typename method>
-  struct thunktype;
-
-  template<class klass>
-  struct thunktype<R (klass::*)>
-  {
-    typedef klass K;
-  };
-
-  template<class klass, R (klass::*method)(A1, A2, A3, A4, A5, A6)>
-  static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+  template<class klass, R (klass::*method)(A1, A2, A3, A4, A5)>
+  static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
   {
     klass *obj = static_cast<klass *>(self);
-    return (obj->*method) (a1, a2, a3, a4, a5, a6);
+    return (obj->*method) (a1, a2, a3, a4, a5);
   }
+};
+
+template<class R, class A1, class A2, class A3, class A4, class A5, class A6>
+struct callback<R (A1, A2, A3, A4, A5, A6)>
+{
+  typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6);
 
-public:
   template<class K, R (K::*method)(A1, A2, A3, A4, A5, A6)>
   void set (K *object)
   {
@@ -358,37 +262,25 @@ public:
   {
     return call (a1, a2, a3, a4, a5, a6);
   }
-};
-
-template<class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
-struct callback<R (A1, A2, A3, A4, A5, A6, A7)>
-{
-  typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6, A7);
 
 private:
 
   void *self;
   ptr_type func;
 
-protected:
-
-  template<typename method>
-  struct thunktype;
-
-  template<class klass>
-  struct thunktype<R (klass::*)>
-  {
-    typedef klass K;
-  };
-
-  template<class klass, R (klass::*method)(A1, A2, A3, A4, A5, A6, A7)>
-  static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+  template<class klass, R (klass::*method)(A1, A2, A3, A4, A5, A6)>
+  static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
   {
     klass *obj = static_cast<klass *>(self);
-    return (obj->*method) (a1, a2, a3, a4, a5, a6, a7);
+    return (obj->*method) (a1, a2, a3, a4, a5, a6);
   }
+};
+
+template<class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+struct callback<R (A1, A2, A3, A4, A5, A6, A7)>
+{
+  typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6, A7);
 
-public:
   template<class K, R (K::*method)(A1, A2, A3, A4, A5, A6, A7)>
   void set (K *object)
   {
@@ -405,37 +297,25 @@ public:
   {
     return call (a1, a2, a3, a4, a5, a6, a7);
   }
-};
-
-template<class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
-struct callback<R (A1, A2, A3, A4, A5, A6, A7, A8)>
-{
-  typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6, A7, A8);
 
 private:
 
   void *self;
   ptr_type func;
 
-protected:
-
-  template<typename method>
-  struct thunktype;
-
-  template<class klass>
-  struct thunktype<R (klass::*)>
-  {
-    typedef klass K;
-  };
-
-  template<class klass, R (klass::*method)(A1, A2, A3, A4, A5, A6, A7, A8)>
-  static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+  template<class klass, R (klass::*method)(A1, A2, A3, A4, A5, A6, A7)>
+  static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
   {
     klass *obj = static_cast<klass *>(self);
-    return (obj->*method) (a1, a2, a3, a4, a5, a6, a7, a8);
+    return (obj->*method) (a1, a2, a3, a4, a5, a6, a7);
   }
+};
+
+template<class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+struct callback<R (A1, A2, A3, A4, A5, A6, A7, A8)>
+{
+  typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6, A7, A8);
 
-public:
   template<class K, R (K::*method)(A1, A2, A3, A4, A5, A6, A7, A8)>
   void set (K *object)
   {
@@ -452,37 +332,25 @@ public:
   {
     return call (a1, a2, a3, a4, a5, a6, a7, a8);
   }
-};
-
-template<class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
-struct callback<R (A1, A2, A3, A4, A5, A6, A7, A8, A9)>
-{
-  typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6, A7, A8, A9);
 
 private:
 
   void *self;
   ptr_type func;
 
-protected:
-
-  template<typename method>
-  struct thunktype;
-
-  template<class klass>
-  struct thunktype<R (klass::*)>
-  {
-    typedef klass K;
-  };
-
-  template<class klass, R (klass::*method)(A1, A2, A3, A4, A5, A6, A7, A8, A9)>
-  static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+  template<class klass, R (klass::*method)(A1, A2, A3, A4, A5, A6, A7, A8)>
+  static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
   {
     klass *obj = static_cast<klass *>(self);
-    return (obj->*method) (a1, a2, a3, a4, a5, a6, a7, a8, a9);
+    return (obj->*method) (a1, a2, a3, a4, a5, a6, a7, a8);
   }
+};
+
+template<class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+struct callback<R (A1, A2, A3, A4, A5, A6, A7, A8, A9)>
+{
+  typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6, A7, A8, A9);
 
-public:
   template<class K, R (K::*method)(A1, A2, A3, A4, A5, A6, A7, A8, A9)>
   void set (K *object)
   {
@@ -499,37 +367,25 @@ public:
   {
     return call (a1, a2, a3, a4, a5, a6, a7, a8, a9);
   }
-};
-
-template<class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
-struct callback<R (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)>
-{
-  typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10);
 
 private:
 
   void *self;
   ptr_type func;
 
-protected:
-
-  template<typename method>
-  struct thunktype;
-
-  template<class klass>
-  struct thunktype<R (klass::*)>
-  {
-    typedef klass K;
-  };
-
-  template<class klass, R (klass::*method)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)>
-  static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10)
+  template<class klass, R (klass::*method)(A1, A2, A3, A4, A5, A6, A7, A8, A9)>
+  static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
   {
     klass *obj = static_cast<klass *>(self);
-    return (obj->*method) (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
+    return (obj->*method) (a1, a2, a3, a4, a5, a6, a7, a8, a9);
   }
+};
+
+template<class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
+struct callback<R (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)>
+{
+  typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10);
 
-public:
   template<class K, R (K::*method)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)>
   void set (K *object)
   {
@@ -546,6 +402,18 @@ public:
   {
     return call (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
   }
+
+private:
+
+  void *self;
+  ptr_type func;
+
+  template<class klass, R (klass::*method)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)>
+  static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10)
+  {
+    klass *obj = static_cast<klass *>(self);
+    return (obj->*method) (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
+  }
 };