|
| Callback () |
|
template<typename FUNCTOR > |
| Callback (FUNCTOR const &functor, bool, bool) |
| Construct a functor call back, supporting operator() calls. More...
|
|
template<typename OBJ_PTR , typename MEM_PTR > |
| Callback (OBJ_PTR const &objPtr, MEM_PTR memPtr) |
| Construct a member function pointer call back. More...
|
|
| Callback (Ptr< CallbackImpl< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > > const &impl) |
| Construct from a CallbackImpl pointer. More...
|
|
void | Assign (const CallbackBase &other) |
| Adopt the other's implementation, if type compatible. More...
|
|
template<typename T > |
Callback< R, T2, T3, T4, T5,
T6, T7, T8, T9 > | Bind (T a) |
| Bind the first arguments. More...
|
|
bool | CheckType (const CallbackBase &other) const |
| Check for compatible types. More...
|
|
bool | IsEqual (const CallbackBase &other) const |
| Equality test. More...
|
|
bool | IsNull (void) const |
| Check for null implementation. More...
|
|
void | Nullify (void) |
| Discard the implementation, set it to null. More...
|
|
template<typename TX1 , typename TX2 , typename TX3 > |
Callback< R, T4, T5, T6, T7,
T8, T9 > | ThreeBind (TX1 a1, TX2 a2, TX3 a3) |
| Bind the first three arguments. More...
|
|
template<typename TX1 , typename TX2 > |
Callback< R, T3, T4, T5, T6,
T7, T8, T9 > | TwoBind (TX1 a1, TX2 a2) |
| Bind the first two arguments. More...
|
|
|
R | operator() (void) const |
| Functor with varying numbers of arguments. More...
|
|
R | operator() (T1 a1) const |
|
R | operator() (T1 a1, T2 a2) const |
|
R | operator() (T1 a1, T2 a2, T3 a3) const |
|
R | operator() (T1 a1, T2 a2, T3 a3, T4 a4) const |
|
R | operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) const |
|
R | operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) const |
|
R | operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) const |
|
R | operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) const |
|
R | operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) const |
|
| CallbackBase () |
|
Ptr< CallbackImplBase > | GetImpl (void) const |
|
template<typename R, typename T1 = empty, typename T2 = empty, typename T3 = empty, typename T4 = empty, typename T5 = empty, typename T6 = empty, typename T7 = empty, typename T8 = empty, typename T9 = empty>
class ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >
Callback template class.
This class template implements the Functor Design Pattern. It is used to declare the type of a Callback:
- the first non-optional template argument represents the return type of the callback.
- the remaining (optional) template arguments represent the type of the subsequent arguments to the callback.
- up to nine arguments are supported.
Callback instances are built with the MakeCallback template functions. Callback instances have POD semantics: the memory they allocate is managed automatically, without user intervention which allows you to pass around Callback instances by value.
Sample code which shows how to use this class template as well as the function templates MakeCallback :
#include "ns3/callback.h"
#include "ns3/assert.h"
#include <iostream>
using namespace ns3;
static double
CbOne (
double a,
double b)
{
std::cout << "invoke cbOne a=" << a << ", b=" << b << std::endl;
return a;
}
public:
int CbTwo (double a) {
std::cout << "invoke cbTwo a=" << a << std::endl;
return -5;
}
};
int main (
int argc,
char *argv[])
{
double retOne;
retOne = one (10.0, 20.0);
int retTwo;
retTwo = two (10.0);
two = MakeNullCallback<int, double> ();
#if 0
#endif
#if 0
#endif
return 0;
}
- Internal:
- This code was originally written based on the techniques described in http://www.codeproject.com/cpp/TTLFunction.asp It was subsequently rewritten to follow the architecture outlined in "Modern C++ Design" by Andrei Alexandrescu in chapter 5, "Generalized Functors".
This code uses:
- default template parameters to saves users from having to specify empty parameters when the number of parameters is smaller than the maximum supported number
- the pimpl idiom: the Callback class is passed around by value and delegates the crux of the work to its pimpl pointer.
- two pimpl implementations which derive from CallbackImpl FunctorCallbackImpl can be used with any functor-type while MemPtrCallbackImpl can be used with pointers to member functions.
- a reference list implementation to implement the Callback's value semantics.
This code most notably departs from the alexandrescu implementation in that it does not use type lists to specify and pass around the types of the callback arguments. Of course, it also does not use copy-destruction semantics and relies on a reference list rather than autoPtr to hold the pointer.
Definition at line 920 of file callback.h.
template<typename R, typename T1 = empty, typename T2 = empty, typename T3 = empty, typename T4 = empty, typename T5 = empty, typename T6 = empty, typename T7 = empty, typename T8 = empty, typename T9 = empty>
template<typename FUNCTOR >
ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::Callback |
( |
FUNCTOR const & |
functor, |
|
|
bool |
, |
|
|
bool |
|
|
) |
| |
|
inline |
Construct a functor call back, supporting operator() calls.
- Parameters
-
functor | the functor to run on this callback |
- Internal:
- There are two dummy args below to ensure that this constructor is always properly disambiguated by the c++ compiler.
Definition at line 934 of file callback.h.
template<typename R, typename T1 = empty, typename T2 = empty, typename T3 = empty, typename T4 = empty, typename T5 = empty, typename T6 = empty, typename T7 = empty, typename T8 = empty, typename T9 = empty>
template<typename OBJ_PTR , typename MEM_PTR >
ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::Callback |
( |
OBJ_PTR const & |
objPtr, |
|
|
MEM_PTR |
memPtr |
|
) |
| |
|
inline |
Construct a member function pointer call back.
- Parameters
-
objPtr | pointer to the object |
memPtr | pointer to the member function |
Definition at line 945 of file callback.h.
template<typename R, typename T1 = empty, typename T2 = empty, typename T3 = empty, typename T4 = empty, typename T5 = empty, typename T6 = empty, typename T7 = empty, typename T8 = empty, typename T9 = empty>
Adopt the other's implementation, if type compatible.
- Parameters
-
Definition at line 1155 of file callback.h.
Referenced by ns3::TracedCallback< T1, T2, T3, T4, T5, T6, T7, T8 >::Connect(), ns3::TracedCallback< T1, T2, T3, T4, T5, T6, T7, T8 >::ConnectWithoutContext(), ns3::TracedCallback< T1, T2, T3, T4, T5, T6, T7, T8 >::Disconnect(), and main().
template<typename R, typename T1 = empty, typename T2 = empty, typename T3 = empty, typename T4 = empty, typename T5 = empty, typename T6 = empty, typename T7 = empty, typename T8 = empty, typename T9 = empty>
template<typename T >
Callback<R,T2,T3,T4,T5,T6,T7,T8,T9> ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::Bind |
( |
T |
a | ) |
|
|
inline |
Bind the first arguments.
- Parameters
-
- Returns
- the bound callback
Definition at line 965 of file callback.h.
Referenced by ns3::TracedCallback< T1, T2, T3, T4, T5, T6, T7, T8 >::Connect(), and ns3::TracedCallback< T1, T2, T3, T4, T5, T6, T7, T8 >::Disconnect().
template<typename R, typename T1 = empty, typename T2 = empty, typename T3 = empty, typename T4 = empty, typename T5 = empty, typename T6 = empty, typename T7 = empty, typename T8 = empty, typename T9 = empty>
template<typename R, typename T1 = empty, typename T2 = empty, typename T3 = empty, typename T4 = empty, typename T5 = empty, typename T6 = empty, typename T7 = empty, typename T8 = empty, typename T9 = empty>
Check for compatible types.
- Parameters
-
- Returns
- true if other can be dynamic_cast to my type
Definition at line 1169 of file callback.h.
Referenced by ns3::Callback< void, ns3::Ptr< const ns3::Packet >, ns3::UanTxMode, T3, T4, T5, T6, T7, T8 >::CheckType(), and ns3::Callback< void, ns3::Ptr< const ns3::Packet >, ns3::UanTxMode, T3, T4, T5, T6, T7, T8 >::DoAssign().
template<typename R, typename T1 = empty, typename T2 = empty, typename T3 = empty, typename T4 = empty, typename T5 = empty, typename T6 = empty, typename T7 = empty, typename T8 = empty, typename T9 = empty>
CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9>* ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::DoPeekImpl |
( |
void |
| ) |
const |
|
inlineprivate |
- Returns
- the pimpl pointer
Definition at line 1160 of file callback.h.
Referenced by ns3::Callback< void, ns3::Ptr< const ns3::Packet >, ns3::UanTxMode, T3, T4, T5, T6, T7, T8 >::IsNull(), and ns3::Callback< void, ns3::Ptr< const ns3::Packet >, ns3::UanTxMode, T3, T4, T5, T6, T7, T8 >::operator()().
template<typename R, typename T1 = empty, typename T2 = empty, typename T3 = empty, typename T4 = empty, typename T5 = empty, typename T6 = empty, typename T7 = empty, typename T8 = empty, typename T9 = empty>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() |
( |
void |
| ) |
const |
|
inline |
template<typename R, typename T1 = empty, typename T2 = empty, typename T3 = empty, typename T4 = empty, typename T5 = empty, typename T6 = empty, typename T7 = empty, typename T8 = empty, typename T9 = empty>
template<typename TX1 , typename TX2 , typename TX3 >
Callback<R,T4,T5,T6,T7,T8,T9> ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::ThreeBind |
( |
TX1 |
a1, |
|
|
TX2 |
a2, |
|
|
TX3 |
a3 |
|
) |
| |
|
inline |
Bind the first three arguments.
- Parameters
-
a1 | first argument to bind |
a2 | second argument to bind |
a3 | third argument to bind |
- Returns
- the bound callback
Definition at line 1000 of file callback.h.
template<typename R, typename T1 = empty, typename T2 = empty, typename T3 = empty, typename T4 = empty, typename T5 = empty, typename T6 = empty, typename T7 = empty, typename T8 = empty, typename T9 = empty>
template<typename TX1 , typename TX2 >
Callback<R,T3,T4,T5,T6,T7,T8,T9> ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::TwoBind |
( |
TX1 |
a1, |
|
|
TX2 |
a2 |
|
) |
| |
|
inline |
Bind the first two arguments.
- Parameters
-
a1 | first argument to bind |
a2 | second argument to bind |
- Returns
- the bound callback
Definition at line 982 of file callback.h.