--- a/src/core/callback.h Wed Nov 01 13:00:34 2006 +0100
+++ b/src/core/callback.h Wed Nov 01 13:11:30 2006 +0100
@@ -1,4 +1,4 @@
-/* -*- Mode:NS3; -*- */
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* 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 pointer to member functions
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;
};
/**
@@ -192,50 +192,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;
};
/**
@@ -253,7 +253,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
@@ -265,7 +265,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
@@ -277,7 +277,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
@@ -289,7 +289,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
@@ -301,7 +301,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
@@ -313,7 +313,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);
}
/**
@@ -325,7 +325,7 @@
*/
template <typename R>
Callback<R> MakeCallback (R (*fnPtr) ()) {
- return Callback<R> (fnPtr);
+ return Callback<R> (fnPtr);
}
/**
* \ingroup MakeCallback
@@ -336,7 +336,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
@@ -347,7 +347,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
@@ -358,7 +358,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
@@ -369,7 +369,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
@@ -380,7 +380,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);
}
@@ -393,7 +393,7 @@
*/
template <typename R>
Callback<R> MakeNullCallback (void) {
- return Callback<R> ();
+ return Callback<R> ();
}
/**
* \ingroup MakeCallback
@@ -403,7 +403,7 @@
*/
template <typename R, typename T1>
Callback<R,T1> MakeNullCallback (void) {
- return Callback<R,T1> ();
+ return Callback<R,T1> ();
}
/**
* \ingroup MakeCallback
@@ -413,7 +413,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
@@ -423,7 +423,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
@@ -433,7 +433,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
@@ -443,7 +443,7 @@
*/
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> ();
}
@@ -456,64 +456,64 @@
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;
};
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);
}