src/core/callback.h
changeset 54 f860e6f94787
parent 53 ae406f4957d5
child 73 a44becd5a5fc
--- a/src/core/callback.h	Tue Sep 05 13:13:39 2006 +0200
+++ b/src/core/callback.h	Tue Sep 05 13:18:11 2006 +0200
@@ -1,4 +1,4 @@
-/* -*-	Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
+/* -*-    Mode:C++; c-basic-offset:4; tab-width:4; indent-tabs-mode:f -*- */
 /*
  * Copyright (c) 2005,2006 INRIA
  * All rights reserved.
@@ -64,43 +64,43 @@
 template <typename R>
 class CallbackImpl<R,empty,empty,empty,empty,empty> {
 public:
-	virtual ~CallbackImpl () {}
-	virtual R operator() (void) = 0;
+    virtual ~CallbackImpl () {}
+    virtual R operator() (void) = 0;
 };
 // define CallbackImpl for 1 params
 template <typename R, typename T1>
 class CallbackImpl<R,T1,empty,empty,empty,empty> {
 public:
-	virtual ~CallbackImpl () {}
-	virtual R operator() (T1) = 0;
+    virtual ~CallbackImpl () {}
+    virtual R operator() (T1) = 0;
 };
 // define CallbackImpl for 2 params
 template <typename R, typename T1, typename T2>
 class CallbackImpl<R,T1,T2,empty,empty,empty> {
 public:
-	virtual ~CallbackImpl () {}
-	virtual R operator() (T1, T2) = 0;
+    virtual ~CallbackImpl () {}
+    virtual R operator() (T1, T2) = 0;
 };
 // define CallbackImpl for 3 params
 template <typename R, typename T1, typename T2, typename T3>
 class CallbackImpl<R,T1,T2,T3,empty,empty> {
 public:
-	virtual ~CallbackImpl () {}
-	virtual R operator() (T1, T2, T3) = 0;
+    virtual ~CallbackImpl () {}
+    virtual R operator() (T1, T2, T3) = 0;
 };
 // define CallbackImpl for 4 params
 template <typename R, typename T1, typename T2, typename T3, typename T4>
 class CallbackImpl<R,T1,T2,T3,T4,empty> {
 public:
-	virtual ~CallbackImpl () {}
-	virtual R operator() (T1, T2, T3, T4) = 0;
+    virtual ~CallbackImpl () {}
+    virtual R operator() (T1, T2, T3, T4) = 0;
 };
 // define CallbackImpl for 5 params
 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
 class CallbackImpl {
 public:
-	virtual ~CallbackImpl () {}
-	virtual R operator() (T1, T2, T3, T4, T5) = 0;
+    virtual ~CallbackImpl () {}
+    virtual R operator() (T1, T2, T3, T4, T5) = 0;
 };
 
 
@@ -108,59 +108,59 @@
 template <typename T, typename R, typename T1, typename T2, typename T3, typename T4,typename T5>
 class FunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5> {
 public:
-	FunctorCallbackImpl (T const &functor)
-		: m_functor (functor) {}
-	virtual ~FunctorCallbackImpl () {}
-	R operator() (void) {
-		return m_functor ();
-	}
-	R operator() (T1 a1) {
-		return m_functor (a1);
-	}
-	R operator() (T1 a1,T2 a2) {
-		return m_functor (a1,a2);
-	}
-	R operator() (T1 a1,T2 a2,T3 a3) {
-		return m_functor (a1,a2,a3);
-	}
-	R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
-		return m_functor (a1,a2,a3,a4);
-	}
-	R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
-		return m_functor (a1,a2,a3,a4,a5);
-	}
+    FunctorCallbackImpl (T const &functor)
+        : m_functor (functor) {}
+    virtual ~FunctorCallbackImpl () {}
+    R operator() (void) {
+        return m_functor ();
+    }
+    R operator() (T1 a1) {
+        return m_functor (a1);
+    }
+    R operator() (T1 a1,T2 a2) {
+        return m_functor (a1,a2);
+    }
+    R operator() (T1 a1,T2 a2,T3 a3) {
+        return m_functor (a1,a2,a3);
+    }
+    R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
+        return m_functor (a1,a2,a3,a4);
+    }
+    R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
+        return m_functor (a1,a2,a3,a4,a5);
+    }
 private:
-	T m_functor;
+    T m_functor;
 };
 
 // an impl for Bound Functors:
 template <typename T, typename R, typename TX, typename T1, typename T2, typename T3, typename T4,typename T5>
 class BoundFunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5> {
 public:
-	BoundFunctorCallbackImpl (T const &functor, TX a)
-		: m_functor (functor), m_a (a) {}
-	virtual ~BoundFunctorCallbackImpl () {}
-	R operator() (void) {
-		return m_functor (m_a);
-	}
-	R operator() (T1 a1) {
-		return m_functor (m_a,a1);
-	}
-	R operator() (T1 a1,T2 a2) {
-		return m_functor (m_a,a1,a2);
-	}
-	R operator() (T1 a1,T2 a2,T3 a3) {
-		return m_functor (m_a,a1,a2,a3);
-	}
-	R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
-		return m_functor (m_a,a1,a2,a3,a4);
-	}
-	R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
-		return m_functor (m_a,a1,a2,a3,a4,a5);
-	}
+    BoundFunctorCallbackImpl (T const &functor, TX a)
+        : m_functor (functor), m_a (a) {}
+    virtual ~BoundFunctorCallbackImpl () {}
+    R operator() (void) {
+        return m_functor (m_a);
+    }
+    R operator() (T1 a1) {
+        return m_functor (m_a,a1);
+    }
+    R operator() (T1 a1,T2 a2) {
+        return m_functor (m_a,a1,a2);
+    }
+    R operator() (T1 a1,T2 a2,T3 a3) {
+        return m_functor (m_a,a1,a2,a3);
+    }
+    R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
+        return m_functor (m_a,a1,a2,a3,a4);
+    }
+    R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
+        return m_functor (m_a,a1,a2,a3,a4,a5);
+    }
 private:
-	T m_functor;
-	TX m_a;
+    T m_functor;
+    TX m_a;
 };
 
 
@@ -168,30 +168,30 @@
 template <typename OBJ_PTR, typename MEM_PTR, typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
 class MemPtrCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5> {
 public:
-	MemPtrCallbackImpl (OBJ_PTR const&objPtr, MEM_PTR mem_ptr)
-		: m_objPtr (objPtr), m_memPtr (mem_ptr) {}
-	virtual ~MemPtrCallbackImpl () {}
-	R operator() (void) {
-		return ((*m_objPtr).*m_memPtr) ();
-	}
-	R operator() (T1 a1) {
-		return ((*m_objPtr).*m_memPtr) (a1);
-	}
-	R operator() (T1 a1,T2 a2) {
-		return ((*m_objPtr).*m_memPtr) (a1,a2);
-	}
-	R operator() (T1 a1,T2 a2,T3 a3) {
-		return ((*m_objPtr).*m_memPtr) (a1,a2,a3);
-	}
-	R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
-		return ((*m_objPtr).*m_memPtr) (a1,a2,a3,a4);
-	}
-	R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
-		return ((*m_objPtr).*m_memPtr) (a1,a2,a3,a4,a5);
-	}
+    MemPtrCallbackImpl (OBJ_PTR const&objPtr, MEM_PTR mem_ptr)
+        : m_objPtr (objPtr), m_memPtr (mem_ptr) {}
+    virtual ~MemPtrCallbackImpl () {}
+    R operator() (void) {
+        return ((*m_objPtr).*m_memPtr) ();
+    }
+    R operator() (T1 a1) {
+        return ((*m_objPtr).*m_memPtr) (a1);
+    }
+    R operator() (T1 a1,T2 a2) {
+        return ((*m_objPtr).*m_memPtr) (a1,a2);
+    }
+    R operator() (T1 a1,T2 a2,T3 a3) {
+        return ((*m_objPtr).*m_memPtr) (a1,a2,a3);
+    }
+    R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
+        return ((*m_objPtr).*m_memPtr) (a1,a2,a3,a4);
+    }
+    R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
+        return ((*m_objPtr).*m_memPtr) (a1,a2,a3,a4,a5);
+    }
 private:
-	OBJ_PTR const m_objPtr;
-	MEM_PTR m_memPtr;
+    OBJ_PTR const m_objPtr;
+    MEM_PTR m_memPtr;
 };
 
 /**
@@ -223,50 +223,50 @@
  * \include samples/main-callback.cc
  */
 template<typename R, 
-	 typename T1 = empty, typename T2 = empty, 
-	 typename T3 = empty, typename T4 = empty,
-	 typename T5 = empty>
+     typename T1 = empty, typename T2 = empty, 
+     typename T3 = empty, typename T4 = empty,
+     typename T5 = empty>
 class Callback {
 public:
-	template <typename FUNCTOR>
-	Callback (FUNCTOR const &functor) 
-		: m_impl (new FunctorCallbackImpl<FUNCTOR,R,T1,T2,T3,T4,T5> (functor))
-	{}
+    template <typename FUNCTOR>
+    Callback (FUNCTOR const &functor) 
+        : m_impl (new FunctorCallbackImpl<FUNCTOR,R,T1,T2,T3,T4,T5> (functor))
+    {}
 
-	template <typename OBJ_PTR, typename MEM_PTR>
-	Callback (OBJ_PTR const &objPtr, MEM_PTR mem_ptr)
-		: m_impl (new MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5> (objPtr, mem_ptr))
-	{}
+    template <typename OBJ_PTR, typename MEM_PTR>
+    Callback (OBJ_PTR const &objPtr, MEM_PTR mem_ptr)
+        : m_impl (new MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5> (objPtr, mem_ptr))
+    {}
 
-	Callback (ReferenceList<CallbackImpl<R,T1,T2,T3,T4,T5> *> const &impl)
-		: m_impl (impl)
-	{}
+    Callback (ReferenceList<CallbackImpl<R,T1,T2,T3,T4,T5> *> const &impl)
+        : m_impl (impl)
+    {}
 
-	bool isNull (void) {
-		return (m_impl.get () == 0)?true:false;
-	}
+    bool isNull (void) {
+        return (m_impl.get () == 0)?true:false;
+    }
 
-	Callback () : m_impl () {}
-	R operator() (void) {
-		return (*(m_impl.get ())) ();
-	}
-	R operator() (T1 a1) {
-		return (*(m_impl.get ())) (a1);
-	}
-	R operator() (T1 a1, T2 a2) {
-		return (*(m_impl).get ()) (a1,a2);
-	}
-	R operator() (T1 a1, T2 a2, T3 a3) {
-		return (*(m_impl).get ()) (a1,a2,a3);
-	}
-	R operator() (T1 a1, T2 a2, T3 a3, T4 a4) {
-		return (*(m_impl).get ()) (a1,a2,a3,a4);
-	}
-	R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5) {
-		return (*(m_impl).get ()) (a1,a2,a3,a4,a5);
-	}
+    Callback () : m_impl () {}
+    R operator() (void) {
+        return (*(m_impl.get ())) ();
+    }
+    R operator() (T1 a1) {
+        return (*(m_impl.get ())) (a1);
+    }
+    R operator() (T1 a1, T2 a2) {
+        return (*(m_impl).get ()) (a1,a2);
+    }
+    R operator() (T1 a1, T2 a2, T3 a3) {
+        return (*(m_impl).get ()) (a1,a2,a3);
+    }
+    R operator() (T1 a1, T2 a2, T3 a3, T4 a4) {
+        return (*(m_impl).get ()) (a1,a2,a3,a4);
+    }
+    R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5) {
+        return (*(m_impl).get ()) (a1,a2,a3,a4,a5);
+    }
 private:
-	ReferenceList<CallbackImpl<R,T1,T2,T3,T4,T5>*> m_impl;
+    ReferenceList<CallbackImpl<R,T1,T2,T3,T4,T5>*> m_impl;
 };
 
 /**
@@ -284,7 +284,7 @@
  */
 template <typename OBJ, typename R>
 Callback<R> makeCallback (R (OBJ::*mem_ptr) (), OBJ *const objPtr) {
-	return Callback<R> (objPtr, mem_ptr);
+    return Callback<R> (objPtr, mem_ptr);
 }
 /**
  * \ingroup makeCallback
@@ -296,7 +296,7 @@
  */
 template <typename OBJ, typename R, typename T1>
 Callback<R,T1> makeCallback (R (OBJ::*mem_ptr) (T1), OBJ *const objPtr) {
-	return Callback<R,T1> (objPtr, mem_ptr);
+    return Callback<R,T1> (objPtr, mem_ptr);
 }
 /**
  * \ingroup makeCallback
@@ -308,7 +308,7 @@
  */
 template <typename OBJ, typename R, typename T1, typename T2>
 Callback<R,T1,T2> makeCallback (R (OBJ::*mem_ptr) (T1,T2), OBJ *const objPtr) {
-	return Callback<R,T1,T2> (objPtr, mem_ptr);
+    return Callback<R,T1,T2> (objPtr, mem_ptr);
 }
 /**
  * \ingroup makeCallback
@@ -320,7 +320,7 @@
  */
 template <typename OBJ, typename R, typename T1,typename T2, typename T3>
 Callback<R,T1,T2,T3> makeCallback (R (OBJ::*mem_ptr) (T1,T2,T3), OBJ *const objPtr) {
-	return Callback<R,T1,T2,T3> (objPtr, mem_ptr);
+    return Callback<R,T1,T2,T3> (objPtr, mem_ptr);
 }
 /**
  * \ingroup makeCallback
@@ -332,7 +332,7 @@
  */
 template <typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4>
 Callback<R,T1,T2,T3,T4> makeCallback (R (OBJ::*mem_ptr) (T1,T2,T3,T4), OBJ *const objPtr) {
-	return Callback<R,T1,T2,T3,T4> (objPtr, mem_ptr);
+    return Callback<R,T1,T2,T3,T4> (objPtr, mem_ptr);
 }
 /**
  * \ingroup makeCallback
@@ -344,7 +344,7 @@
  */
 template <typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5>
 Callback<R,T1,T2,T3,T4,T5> makeCallback (R (OBJ::*mem_ptr) (T1,T2,T3,T4,T5), OBJ *const objPtr) {
-	return Callback<R,T1,T2,T3,T4,T5> (objPtr, mem_ptr);
+    return Callback<R,T1,T2,T3,T4,T5> (objPtr, mem_ptr);
 }
 
 /**
@@ -356,7 +356,7 @@
  */
 template <typename R>
 Callback<R> makeCallback (R (*fnPtr) ()) {
-	return Callback<R> (fnPtr);
+    return Callback<R> (fnPtr);
 }
 /**
  * \ingroup makeCallback
@@ -367,7 +367,7 @@
  */
 template <typename R, typename T1>
 Callback<R,T1> makeCallback (R (*fnPtr) (T1)) {
-	return Callback<R,T1> (fnPtr);
+    return Callback<R,T1> (fnPtr);
 }
 /**
  * \ingroup makeCallback
@@ -378,7 +378,7 @@
  */
 template <typename R, typename T1, typename T2>
 Callback<R,T1,T2> makeCallback (R (*fnPtr) (T1,T2)) {
-	return Callback<R,T1,T2> (fnPtr);
+    return Callback<R,T1,T2> (fnPtr);
 }
 /**
  * \ingroup makeCallback
@@ -389,7 +389,7 @@
  */
 template <typename R, typename T1, typename T2,typename T3>
 Callback<R,T1,T2,T3> makeCallback (R (*fnPtr) (T1,T2,T3)) {
-	return Callback<R,T1,T2,T3> (fnPtr);
+    return Callback<R,T1,T2,T3> (fnPtr);
 }
 /**
  * \ingroup makeCallback
@@ -400,7 +400,7 @@
  */
 template <typename R, typename T1, typename T2,typename T3,typename T4>
 Callback<R,T1,T2,T3,T4> makeCallback (R (*fnPtr) (T1,T2,T3,T4)) {
-	return Callback<R,T1,T2,T3,T4> (fnPtr);
+    return Callback<R,T1,T2,T3,T4> (fnPtr);
 }
 /**
  * \ingroup makeCallback
@@ -411,7 +411,7 @@
  */
 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5>
 Callback<R,T1,T2,T3,T4,T5> makeCallback (R (*fnPtr) (T1,T2,T3,T4,T5)) {
-	return Callback<R,T1,T2,T3,T4,T5> (fnPtr);
+    return Callback<R,T1,T2,T3,T4,T5> (fnPtr);
 }
 
 
@@ -424,7 +424,7 @@
  */
 template <typename R>
 Callback<R> makeNullCallback (void) {
-	return Callback<R> ();
+    return Callback<R> ();
 }
 /**
  * \ingroup makeCallback
@@ -434,7 +434,7 @@
  */
 template <typename R, typename T1>
 Callback<R,T1> makeNullCallback (void) {
-	return Callback<R,T1> ();
+    return Callback<R,T1> ();
 }
 /**
  * \ingroup makeCallback
@@ -444,7 +444,7 @@
  */
 template <typename R, typename T1, typename T2>
 Callback<R,T1,T2> makeNullCallback (void) {
-	return Callback<R,T1,T2> ();
+    return Callback<R,T1,T2> ();
 }
 /**
  * \ingroup makeCallback
@@ -454,7 +454,7 @@
  */
 template <typename R, typename T1, typename T2,typename T3>
 Callback<R,T1,T2,T3> makeNullCallback (void) {
-	return Callback<R,T1,T2,T3> ();
+    return Callback<R,T1,T2,T3> ();
 }
 /**
  * \ingroup makeCallback
@@ -464,7 +464,7 @@
  */
 template <typename R, typename T1, typename T2,typename T3,typename T4>
 Callback<R,T1,T2,T3,T4> makeNullCallback (void) {
-	return Callback<R,T1,T2,T3,T4> ();
+    return Callback<R,T1,T2,T3,T4> ();
 }
 /**
  * \ingroup makeCallback
@@ -474,41 +474,41 @@
  */
 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5>
 Callback<R,T1,T2,T3,T4,T5> makeNullCallback (void) {
-	return Callback<R,T1,T2,T3,T4,T5> ();
+    return Callback<R,T1,T2,T3,T4,T5> ();
 }
 
 template <typename R, typename TX, typename T1>
 Callback<R,T1> makeBoundCallback (R (*fnPtr) (TX,T1), TX a) {
-	ReferenceList<CallbackImpl<R,T1,empty,empty,empty,empty>*> impl =
-	ReferenceList<CallbackImpl<R,T1,empty,empty,empty,empty>*> (
-	new BoundFunctorCallbackImpl<R (*) (TX,T1),R,TX,T1,empty,empty,empty,empty> (fnPtr, a)
-	);
-	return Callback<R,T1> (impl);
+    ReferenceList<CallbackImpl<R,T1,empty,empty,empty,empty>*> impl =
+    ReferenceList<CallbackImpl<R,T1,empty,empty,empty,empty>*> (
+    new BoundFunctorCallbackImpl<R (*) (TX,T1),R,TX,T1,empty,empty,empty,empty> (fnPtr, a)
+    );
+    return Callback<R,T1> (impl);
 }
 template <typename R, typename TX, typename T1, typename T2>
 Callback<R,T1,T2> makeBoundCallback (R (*fnPtr) (TX,T1,T2), TX a) {
-	ReferenceList<CallbackImpl<R,T1,T2,empty,empty,empty>*> impl =
-	ReferenceList<CallbackImpl<R,T1,T2,empty,empty,empty>*> (
-	new BoundFunctorCallbackImpl<R (*) (TX,T1,T2),R,TX,T1,T2,empty,empty,empty> (fnPtr, a)
-	);
-	return Callback<R,T1,T2> (impl);
+    ReferenceList<CallbackImpl<R,T1,T2,empty,empty,empty>*> impl =
+    ReferenceList<CallbackImpl<R,T1,T2,empty,empty,empty>*> (
+    new BoundFunctorCallbackImpl<R (*) (TX,T1,T2),R,TX,T1,T2,empty,empty,empty> (fnPtr, a)
+    );
+    return Callback<R,T1,T2> (impl);
 }
 template <typename R, typename TX, typename T1, typename T2,typename T3,typename T4>
 Callback<R,T1,T2,T3,T4> makeBoundCallback (R (*fnPtr) (TX,T1,T2,T3,T4), TX a) {
-	ReferenceList<CallbackImpl<R,T1,T2,T3,T4,empty>*> impl =
-	ReferenceList<CallbackImpl<R,T1,T2,T3,T4,empty>*> (
-	new BoundFunctorCallbackImpl<R (*) (TX,T1,T2,T3,T4),R,TX,T1,T2,T3,T4,empty> (fnPtr, a)
-	);
-	return Callback<R,T1,T2,T3,T4> (impl);
+    ReferenceList<CallbackImpl<R,T1,T2,T3,T4,empty>*> impl =
+    ReferenceList<CallbackImpl<R,T1,T2,T3,T4,empty>*> (
+    new BoundFunctorCallbackImpl<R (*) (TX,T1,T2,T3,T4),R,TX,T1,T2,T3,T4,empty> (fnPtr, a)
+    );
+    return Callback<R,T1,T2,T3,T4> (impl);
 }
 
 template <typename R, typename TX, typename T1, typename T2,typename T3,typename T4,typename T5>
 Callback<R,T1,T2,T3,T4,T5> makeBoundCallback (R (*fnPtr) (TX,T1,T2,T3,T4,T5), TX a) {
-	ReferenceList<CallbackImpl<R,T1,T2,T3,T4,T5>*> impl =
-	ReferenceList<CallbackImpl<R,T1,T2,T3,T4,T5>*> (
-	new BoundFunctorCallbackImpl<R (*) (TX,T1,T2,T3,T4,T5),R,TX,T1,T2,T3,T4,T5> (fnPtr, a)
-	);
-	return Callback<R,T1,T2,T3,T4,T5> (impl);
+    ReferenceList<CallbackImpl<R,T1,T2,T3,T4,T5>*> impl =
+    ReferenceList<CallbackImpl<R,T1,T2,T3,T4,T5>*> (
+    new BoundFunctorCallbackImpl<R (*) (TX,T1,T2,T3,T4,T5),R,TX,T1,T2,T3,T4,T5> (fnPtr, a)
+    );
+    return Callback<R,T1,T2,T3,T4,T5> (impl);
 }