A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > Class Template Reference

Callback template class. More...

#include <callback.h>

Inherits ns3::CallbackBase.

+ Collaboration diagram for ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >:

Public Member Functions

 Callback ()
template<typename FUNCTOR >
 Callback (FUNCTOR const &functor, bool, bool)
template<typename OBJ_PTR , typename MEM_PTR >
 Callback (OBJ_PTR const &objPtr, MEM_PTR mem_ptr)
 Callback (Ptr< CallbackImpl< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > > const &impl)
void Assign (const CallbackBase &other)
template<typename T >
Callback< R, T2, T3, T4, T5,
T6, T7, T8, T9 > 
Bind (T a)
bool CheckType (const CallbackBase &other) const
bool IsEqual (const CallbackBase &other) const
bool IsNull (void) const
void Nullify (void)
operator() (void) const
operator() (T1 a1) const
operator() (T1 a1, T2 a2) const
operator() (T1 a1, T2 a2, T3 a3) const
operator() (T1 a1, T2 a2, T3 a3, T4 a4) const
operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) const
operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) const
operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) const
operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) const
operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9) const
- Public Member Functions inherited from ns3::CallbackBase
 CallbackBase ()
Ptr< CallbackImplBaseGetImpl (void) const

Private Member Functions

void DoAssign (Ptr< const CallbackImplBase > other)
bool DoCheckType (Ptr< const CallbackImplBase > other) const
CallbackImpl< R, T1, T2, T3,
T4, T5, T6, T7, T8, T9 > * 
DoPeekImpl (void) const

Additional Inherited Members

- Protected Member Functions inherited from ns3::CallbackBase
 CallbackBase (Ptr< CallbackImplBase > impl)
- Static Protected Member Functions inherited from ns3::CallbackBase
static std::string Demangle (const std::string &mangled)
- Protected Attributes inherited from ns3::CallbackBase
Ptr< CallbackImplBasem_impl

Detailed Description

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 second optional template argument represents the type of the first argument to the callback.
  • the third optional template argument represents the type of the second argument to the callback.
  • the fourth optional template argument represents the type of the third argument to the callback.
  • the fifth optional template argument represents the type of the fourth argument to the callback.
  • the sixth optional template argument represents the type of the fifth argument to the callback.

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 :

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
#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;
}
class MyCb {
public:
int CbTwo (double a) {
std::cout << "invoke cbTwo a=" << a << std::endl;
return -5;
}
};
int main (int argc, char *argv[])
{
// return type: double
// first arg type: double
// second arg type: double
// build callback instance which points to cbOne function
one = MakeCallback (&CbOne);
// this is not a null callback
NS_ASSERT (!one.IsNull ());
// invoke cbOne function through callback instance
double retOne;
retOne = one (10.0, 20.0);
// callback returned expected value
NS_ASSERT (retOne == 10.0);
// return type: int
// first arg type: double
MyCb cb;
// build callback instance which points to MyCb::cbTwo
two = MakeCallback (&MyCb::CbTwo, &cb);
// this is not a null callback
NS_ASSERT (!two.IsNull ());
// invoke MyCb::cbTwo through callback instance
int retTwo;
retTwo = two (10.0);
// callback returned expected value
NS_ASSERT (retTwo == -5);
two = MakeNullCallback<int, double> ();
// invoking a null callback is just like
// invoking a null function pointer:
// it will crash.
//int retTwoNull = two (20.0);
NS_ASSERT (two.IsNull ());
#if 0
// The below type mismatch between CbOne() and callback two will fail to
// compile if enabled in this program.
two = MakeCallback (&CbOne);
#endif
#if 0
// This is a slightly different example, in which the code will compile
// but because callbacks are type-safe, will cause a fatal error at runtime
// (the difference here is that Assign() is called instead of operator=)
#endif
return 0;
}

Definition at line 369 of file callback.h.

Constructor & Destructor Documentation

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>
ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::Callback ( )
inline

Definition at line 371 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

Definition at line 376 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  mem_ptr 
)
inline

Definition at line 381 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>
ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::Callback ( Ptr< CallbackImpl< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > > const &  impl)
inline

Definition at line 385 of file callback.h.

Member Function Documentation

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>
void ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::Assign ( const CallbackBase other)
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 T >
Callback<R,T2,T3,T4,T5,T6,T7,T8,T9> ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::Bind ( a)
inline

Definition at line 390 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().

+ Here is the caller graph for this function:

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>
bool ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::CheckType ( const CallbackBase other) const
inline

Definition at line 441 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>
void ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::DoAssign ( Ptr< const CallbackImplBase other)
inlineprivate

Definition at line 465 of file callback.h.

Referenced by ns3::Callback< void, Ptr< const PacketBurst >, empty, empty, empty, empty, empty, empty, empty >::Assign().

+ Here is the caller graph for this function:

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>
bool ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::DoCheckType ( Ptr< const CallbackImplBase other) const
inlineprivate
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
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>
bool ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::IsEqual ( const CallbackBase other) const
inline

Definition at line 437 of file callback.h.

Referenced by ns3::aodv::QueueEntryTest::DoRun(), and ns3::operator!=().

+ Here is the caller graph for this function:

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>
bool ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::IsNull ( void  ) const
inline

Definition at line 399 of file callback.h.

Referenced by ns3::NullifyCallbackTestCase::DoRun(), ns3::HalfDuplexIdealPhy::EndRx(), ns3::LteSpectrumPhy::EndRx(), ns3::HalfDuplexIdealPhy::EndTx(), ns3::LteSpectrumPhy::EndTx(), ns3::dsr::DsrRouting::ForwardErrPacket(), ns3::Ipv4EndPoint::ForwardIcmp(), ns3::UdpSocketImpl::ForwardIcmp(), ns3::Ipv6EndPoint::ForwardIcmp(), ns3::UdpSocketImpl::ForwardIcmp6(), ns3::dsr::DsrRouting::ForwardPacket(), ns3::Ipv4EndPoint::ForwardUp(), ns3::WifiNetDevice::ForwardUp(), ns3::Ipv6EndPoint::ForwardUp(), ns3::EmuNetDevice::ForwardUp(), ns3::dot11s::HwmpProtocol::GetBroadcastReceivers(), ns3::MeshWifiInterfaceMac::GetLinkMetric(), ns3::dot11s::HwmpProtocol::GetPreqReceivers(), ns3::EdcaTxopN::GotAck(), ns3::DcaTxop::GotAck(), ns3::AcousticModemEnergyModel::HandleEnergyDepletion(), ns3::WifiRadioEnergyModel::HandleEnergyDepletion(), ns3::AttributeObjectTest::InvokeCbValue(), ns3::RandomVariableStreamAttributeTestCase::InvokeCbValue(), ns3::CallbackValueTestCase::InvokeCbValue(), ns3::WimaxNetDevice::IsPromisc(), main(), ns3::EdcaTxopN::MissedAck(), ns3::DcaTxop::MissedAck(), ns3::EdcaTxopN::MissedCts(), ns3::DcaTxop::MissedCts(), ns3::Socket::NotifyConnectionFailed(), ns3::Socket::NotifyConnectionRequest(), ns3::Socket::NotifyConnectionSucceeded(), ns3::Socket::NotifyDataRecv(), ns3::Socket::NotifyDataSent(), ns3::Socket::NotifyErrorClose(), ns3::dot11s::PeerManagementProtocol::NotifyLinkClose(), ns3::dot11s::PeerManagementProtocol::NotifyLinkOpen(), ns3::WifiRadioEnergyModelPhyListener::NotifyMaybeCcaBusyStart(), ns3::Icmpv4L4Protocol::NotifyNewAggregate(), ns3::NscTcpL4Protocol::NotifyNewAggregate(), ns3::TcpL4Protocol::NotifyNewAggregate(), ns3::UdpL4Protocol::NotifyNewAggregate(), ns3::Icmpv6L4Protocol::NotifyNewAggregate(), ns3::Socket::NotifyNewConnectionCreated(), ns3::Socket::NotifyNormalClose(), ns3::AlohaNoackNetDevice::NotifyReceptionEndOk(), ns3::WifiRadioEnergyModelPhyListener::NotifyRxEndError(), ns3::WifiRadioEnergyModelPhyListener::NotifyRxEndOk(), ns3::WifiRadioEnergyModelPhyListener::NotifyRxStart(), ns3::Socket::NotifySend(), ns3::WifiRadioEnergyModelPhyListener::NotifySwitchingStart(), ns3::WifiRadioEnergyModelPhyListener::NotifyTxStart(), ns3::Packet::PrintByteTags(), ns3::aodv::Neighbors::Purge(), ns3::dsr::RouteCache::PurgeMac(), ns3::SimpleNetDevice::Receive(), ns3::ErrorNetDevice::Receive(), ns3::MpiReceiver::Receive(), ns3::LoopbackNetDevice::Receive(), ns3::StaWifiMac::Receive(), ns3::VirtualNetDevice::Receive(), ns3::PointToPointNetDevice::Receive(), ns3::CsmaNetDevice::Receive(), ns3::BridgeNetDevice::ReceiveFromDevice(), ns3::MeshPointDevice::ReceiveFromDevice(), ns3::aodv::RoutingProtocol::RouteInput(), ns3::dsdv::RoutingProtocol::RouteInput(), ns3::olsr::RoutingProtocol::RouteInput(), ns3::UanPhyGen::RxEndEvent(), ns3::dsr::DsrRouting::Send(), ns3::dsr::DsrRouting::SendAck(), ns3::dsr::DsrRouting::SendErrorRequest(), ns3::dsr::DsrRouting::SendInitialRequest(), ns3::dsr::DsrRouting::SendPacketFromBuffer(), ns3::dsr::DsrRouting::SendReply(), ns3::dsr::DsrRouting::SendRequest(), ns3::WifiRadioEnergyModelPhyListener::SetChangeStateCallback(), ns3::AcousticModemEnergyModel::SetEnergyDepletionCallback(), ns3::WifiRadioEnergyModel::SetEnergyDepletionCallback(), ns3::UanPhyGen::SetSleepMode(), ns3::HalfDuplexIdealPhy::StartRx(), ns3::WifiPhyStateHelper::SwitchFromRxEndError(), ns3::WifiPhyStateHelper::SwitchFromRxEndOk(), ns3::WifiRadioEnergyModelPhyListener::SwitchToIdle(), ns3::UanPhyGen::UpdatePowerConsumption(), ns3::Ipv4EndPoint::~Ipv4EndPoint(), and ns3::Ipv6EndPoint::~Ipv6EndPoint().

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

Definition at line 406 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() ( T1  a1) const
inline

Definition at line 409 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() ( T1  a1,
T2  a2 
) const
inline

Definition at line 412 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() ( T1  a1,
T2  a2,
T3  a3 
) const
inline

Definition at line 415 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() ( T1  a1,
T2  a2,
T3  a3,
T4  a4 
) const
inline

Definition at line 418 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() ( T1  a1,
T2  a2,
T3  a3,
T4  a4,
T5  a5 
) const
inline

Definition at line 421 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() ( T1  a1,
T2  a2,
T3  a3,
T4  a4,
T5  a5,
T6  a6 
) const
inline

Definition at line 424 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() ( T1  a1,
T2  a2,
T3  a3,
T4  a4,
T5  a5,
T6  a6,
T7  a7 
) const
inline

Definition at line 427 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() ( T1  a1,
T2  a2,
T3  a3,
T4  a4,
T5  a5,
T6  a6,
T7  a7,
T8  a8 
) const
inline

Definition at line 430 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>
R ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::operator() ( T1  a1,
T2  a2,
T3  a3,
T4  a4,
T5  a5,
T6  a6,
T7  a7,
T8  a8,
T9  a9 
) const
inline

Definition at line 433 of file callback.h.


The documentation for this class was generated from the following file: