doc/howtos/howtos-callbacks.h
author Tom Henderson <tomh@tomh.org>
Thu, 10 Jan 2008 07:31:40 -0800
changeset 2217 0b4567d545de
permissions -rw-r--r--
Doxygen organization
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2217
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     1
/*!
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     2
\page callbacks Using ns-3 callbacks
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     3
\anchor howtos-callbacks
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     4
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     5
\section null_callbacks Null Callbacks
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     6
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     7
<b>Question:</b> The API I am using calls for using a callback (in the 
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     8
function signature), but I do not
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     9
want to provide one.  Is there a way to provide a null callback?
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    10
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    11
<b>Answer:</b> Use the ns3::MakeNullCallback construct:
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    12
\code
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    13
template<typename R>
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    14
Callback< R, T1, T2, T3, T4, T5, T6 > ns3::MakeNullCallback (void)
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    15
\endcode
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    16
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    17
Example usage:  The ns3::Socket class uses callbacks to indicate completion
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    18
of events such as a successful TCP connect().  These callbacks are set
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    19
in the following function:
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    20
\code
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    21
  void Socket::SetConnectCallback (Callback<void, Ptr<Socket> > connectionSucceeded,
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    22
                        Callback<void, Ptr<Socket> > connectionFailed,
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    23
                        Callback<void, Ptr<Socket> > halfClose);
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    24
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    25
\endcode
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    26
But suppose you do not care about registering a callback for the 
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    27
halfClose event (but you want to register one for the 
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    28
connectionSucceeded and connectionFailed cases).  In that case, you
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    29
can pass a null callback as the third argument.  You just need to
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    30
pass a callback with the matching signature, as follows:
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    31
\code
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    32
  localSocket->SetConnectCallback (
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    33
  MakeCallback (&ConnectionSucceededCallback),
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    34
  MakeCallback (&ConnectionFailedCallback),
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    35
  MakeNullCallback<void, Ptr<Socket> > () );
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    36
\endcode
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    37
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    38
*/