The senf::scheduler::FdEvent constructor takes several arguments:
\li a string describing the event.
\li the callback to call whenever the event occurs. The callback is specified as a <a
- href="http://www.boost.org/doc/html/function.html">Boost.Function</a> object. We use the \c
- senf::membind helper from the Utils library to build such a function object. This helper
- takes an arbitrary class member and binds it to a specific instance.
+ href="http://www.boost.org/doc/libs/release/doc/html/function.html">Boost.Function</a>
+ object. We use the \c senf::membind helper from the Utils library to build such a
+ function object. This helper takes an arbitrary class member and binds it to a specific
+ instance.
\li the handle or file descriptor to monitor.
\li and the events to watch for.
Scheduler. The <tt> \link senf::Scheduler::add add() \endlink </tt> call takes two Arguments,
the socket to bind to (which can be a lot of things and must not necessarily be a socket
instance) and callback function to call, whenever there is an event on that socket.The callback
- is specified as a <a href="http://www.boost.org/doc/html/function.html">Boost.Function</a> object.
- A third argument may be specified to restrict the events, on which the function is called, here we
- used the EV_READ Argument, because we just want the program to read from the socket.
- The default argument is set to \c senf::Scheduler::EV_ALL, which allows all actions on the socket.
+ is specified as a <a href="http://www.boost.org/doc/libs/release/doc/html/function.html">
+ Boost.Function</a> object. A third argument may be specified to restrict the events, on which
+ the function is called, here we used the EV_READ Argument, because we just want the program to
+ read from the socket. The default argument is set to \c senf::Scheduler::EV_ALL, which allows
+ all actions on the socket.
\until }
Here we are using the more generic parser assignment expressed using the \c << operator. This
operator in the most cases works like an ordinary assignment, however it can also be used to
assign parsers to each other efficiently and it supports 'optional values' (as provided by <a
- href="http://www.boost.org/libs/optional/doc/optional.html">Boost.Optional</a> and as returned
- by \c key()).
+ href="http://www.boost.org/doc/libs/release/libs/optional/index.html">Boost.Optional</a> and
+ as returned by \c key()).
\subsection howto_newpacket_type_dump Writing out a complete packet: The 'dump()' member
{
noroute(conn);
conn.onRequest(boost::bind(&PassiveJoin::request,this,boost::ref(conn)));
+ conn.qdisc( QueueingDiscipline::NONE);
}
prefix_ void senf::ppi::module::PassiveJoin::onThrottle()
event_.enabled( false);
noroute(input);
input.onRequest( &PassiveQueueingSocketSink::write);
+ input.qdisc( QueueingDiscipline::NONE);
checkThrottle();
}
into the packet representation. The data will \e not be
validated in any way.
- \param[in] range <a href="http://www.boost.org/libs/range/index.html">Boost.Range</a>
+ \param[in] range <a href="http://www.boost.org/doc/libs/release/libs/range/index.html">Boost.Range</a>
of data to construct packet from. */
#endif
header/interpreter after \a packet in that packets
interpreter chain.
\param[in] packet Packet to append new packet to.
- \param[in] range <a href="http://www.boost.org/libs/range/index.html">Boost.Range</a>
+ \param[in] range <a href="http://www.boost.org/doc/libs/release/libs/range/index.html">Boost.Range</a>
of data to construct packet from. */
#endif
\tparam PacketType packet of which the key is requested
\returns key of the packet wrapped in a <a
- href="http://www.boost.org/libs/optional/doc/optional.html">boost::optional</a> or
+ href="http://www.boost.org/doc/libs/release/libs/optional/index.html">boost::optional</a> or
an unbound optional, if the key is not found.
*/
template <class PacketType>
\param packet The packet of which the key is requested
\returns key of the packet wrapped in a <a
- href="http://www.boost.org/libs/optional/doc/optional.html">boost::optional</a> or
+ href="http://www.boost.org/doc/libs/release/libs/optional/index.html">boost::optional</a> or
an unbound optional, if the key is not found.
*/
static typename boost::optional<typename Tag::key_t> key(Packet const & packet, NoThrow_t);
/** \brief Absolute time data type
- Boost.DateTime datatype used to represent absolute date/time values.
+ <a href="www.boost.org/doc/libs/release/libs/date_time/index.html">Boost.DateTime</a>
+ datatype used to represent absolute date/time values.
*/
typedef boost::posix_time::ptime abstime_type;
/** \brief Relative time data type
- Boost.DateTime datatype used to represent time intervals
+ <a href="www.boost.org/doc/libs/release/libs/date_time/index.html">Boost.DateTime</a>
+ datatype used to represent time intervals
*/
typedef boost::posix_time::time_duration reltime_type;
static abstime_type abstime(clock_type clock); ///< Convert clock to absolute time
/**< This member converts a clock value into an absolute
- Boost.DateTime value.
+ <a href="www.boost.org/doc/libs/release/libs/date_time/index.html">Boost.DateTime</a>
+ value.
\note You should not base timeout calculations on this
absolute time value. Clock time is guaranteed to be
monotonous, absolute time may be non-monotonous if
static reltime_type reltime(clock_type clock); ///< Convert clock to relative time
/**< This member converts a clock value into a relative
- Boost.DateTime time interval
+ <a href="www.boost.org/doc/libs/release/libs/date_time/index.html">Boost.DateTime</a>
+ time interval
\note The resolution of reltime_type might be smaller
than the clock_type resolution */
\section sched_handlers Specifying handlers
All handlers are specified as generic <a
- href="http://www.boost.org/doc/html/function.html">Boost.Function</a> objects. This allows to
- pass any callable as a handler. Depending on the type of handler, some additional arguments may
- be passed to the handler by the %scheduler.
+ href="http://www.boost.org/doc/libs/release/libs/functional/index.html">Boost.Function</a>
+ objects. This allows to pass any callable as a handler. Depending on the type of handler,
+ some additional arguments may be passed to the handler by the %scheduler.
If you need to pass additional information to your handler, use <a
- href="http://www.boost.org/libs/bind/bind.html">Boost.Bind</a>:
+ href="http://www.boost.org/doc/libs/release/libs/bind/bind.html">Boost.Bind</a>:
\code
// Handle callback function
void callback(UDPv4ClientSocketHandle handle, senf::Scheduler::EventId event) {..}
\endcode
To use member-functions as callbacks, use either <a
- href="http://www.boost.org/libs/bind/bind.html">Boost.Bind</a> or senf::membind()
+ href="http://www.boost.org/doc/libs/release/libs/bind/bind.html">Boost.Bind</a> or senf::membind()
\code
// e.g. in Foo::Foo() constructor:
Foo::Foo()
container API. The only difference is, that all elements added to the container \e must be
created via \c new and that the pointer containers themselves are \e not copyable (ok, they are,
if the elements are cloneable ...). See <a
- href="http://www.boost.org/doc/libs/1_36_0/libs/ptr_container/doc/ptr_container.html">Boost.PointerContainer</a>
+ href="http://www.boost.org/doc/libs/release/libs/ptr_container/doc/ptr_container.html">Boost.PointerContainer</a>
for the pointer container library reference.
/// 'Best' type for passing address as parameter
/** Depending on the type of \c Address, this will be either <tt>Address</tt> or <tt>Address
const &</tt>. See <a
- href="http://www.boost.org/libs/utility/call_traits.htm">call_traits documentation in
+ href="http://www.boost.org/doc/libs/release/libs/utility/call_traits.htm">call_traits documentation in
the Boost.Utility library.</a>
*/
typedef typename boost::call_traits<Address>::param_type AddressParam;
\returns past-the-end iterator pointer to after the
last read character
\see \ref read() \n
- <a href="http://www.boost.org/libs/range/index.html">Boost.Range</a> */
+ <a href="http://www.boost.org/doc/libs/release/libs/range/index.html">Boost.Range</a> */
# endif
# ifndef DOXYGEN
template <class ForwardWritableRange>
///< Read data into range
/**< \see read(ForwardWritableRange const &) \n
read() \n
- <a href="http://www.boost.org/libs/range/index.html">Boost.Range</a> */
+ <a href="http://www.boost.org/doc/libs/release/libs/range/index.html">Boost.Range</a> */
# endif
template <class Sequence>
void read (Sequence & container, unsigned limit);
\returns past-the-end iterator pointer to after the
last read character
\see \ref readfrom() \n
- <a href="http://www.boost.org/libs/range/index.html">Boost.Range</a> */
+ <a href="http://www.boost.org/doc/libs/release/libs/range/index.html">Boost.Range</a> */
template <class ForwardWritableRange>
typename boost::range_iterator<ForwardWritableRange>::type
readfrom (ForwardWritableRange & range, Address & from);
///< Read data into range
/**< \see readfrom(ForwardWritableRange const&,Address&) \n
readfrom() \n
- <a href="http://www.boost.org/libs/range/index.html">Boost.Range</a> */
+ <a href="http://www.boost.org/doc/libs/release/libs/range/index.html">Boost.Range</a> */
template <class Sequence>
void readfrom (Sequence & container, Address & from, unsigned limit);
///< Read data into container
\param[in] end past-the-end pointer to area to write
\returns past-the-end pointer after last byte written
\see \ref write() \n
- <a href="http://www.boost.org/libs/range/index.html">Boost.Range</a> */
+ <a href="http://www.boost.org/doc/libs/release/libs/range/index.html">Boost.Range</a> */
/** \brief Write data to unconnected socket
\param[in] end past-the-end pointer after data to write
\returns past-the-end iterator after last byte written
\see \ref writeto() \n
- <a href="http://www.boost.org/libs/range/index.html">Boost.Range</a> */
+ <a href="http://www.boost.org/doc/libs/release/libs/range/index.html">Boost.Range</a> */
///////////////////////////////////////////////////////////////////////////
///\name Addressing
/// 'Best' type for passing address as parameter
/** Depending on the type of \c Address, this will be either <tt>Address</tt> or <tt>Address
const &</tt>. See <a
- href="http://www.boost.org/libs/utility/call_traits.htm">call_traits documentation in
+ href="http://www.boost.org/doc/libs/release/libs/utility/call_traits.htm">call_traits documentation in
the Boost.Utility library.</a>
*/
typedef typename boost::call_traits<Address>::param_type AddressParam;
The \c connect member in this example will only be enabled, it the communication policy of the
socket handle is ConnectedCommunicationPolicy (or a derived type). See <a
- href="http://www.boost.org/libs/utility/enable_if.html">Boost.Enable_If</a> for a discussion of
- the third argument (\c senf::ConnectedCommunicationPolicyIs is based on the \c boost::enable_if
- template).
+ href="http://www.boost.org/doc/libs/release/libs/utility/enable_if.html">Boost.Enable_If</a>
+ for a discussion of the third argument (\c senf::ConnectedCommunicationPolicyIs is based on
+ the \c boost::enable_if template).
\see \ref extend_policy \n
- <a href="http://www.boost.org/libs/utility/enable_if.html">The Boost enable_if utility</a> \n
- <a href="http://www.boost.org/libs/mpl/doc/index.html">The Boost.MPL library</a> \n
- <a href="http://www.boost.org/libs/preprocessor/doc/index.html">The Boost.Preprocessor library</a>
+ <a href="http://www.boost.org/doc/libs/release/libs/utility/enable_if.html">The Boost enable_if utility</a> \n
+ <a href="http://www.boost.org/doc/libs/release/libs/mpl/doc/index.html">The Boost.MPL library</a> \n
+ <a href="http://www.boost.org/doc/libs/release/libs/preprocessor/doc/index.html">The Boost.Preprocessor library</a>
\idea We could combine all the \e Axis \c Is templates into a single template. Since the \e
trait argument will automatically specify the axis to be used, it is not necessary to specify
/** \brief Enable template overload depending on policy value
This template is an example of the \c If \e Axis \c Is family of templates. It is used like
- <a href="http://www.boost.org/libs/utility/enable_if.html">Boost.enable_if</a> to enable a
- templated overload only, if the AddressingPolicy of \e Axis is compatible with \c Trait
- (that is the AddressingPolicy of \c Policy is derived from \c Trait).
+ <a href="http://www.boost.org/doc/libs/release/libs/utility/enable_if.html">Boost.enable_if</a>
+ to enable a templated overload only, if the AddressingPolicy of \e Axis is compatible with
+ \c Trait (that is the AddressingPolicy of \c Policy is derived from \c Trait).
\see policy_group
*/
SocketHandle with policy \c Base).
The metafunction will return true (that is inherits from \c boost::true_type, see the <a
- href="http://www.boost.org/libs/mpl/doc/index.html">Boost.MPL</a> library documentation for
+ href="http://www.boost.org/doc/libs/release/libs/mpl/doc/index.html">Boost.MPL</a> library documentation for
more information) if each policy class in \c Base is a baseclass of (or the same as) the
corresponding policy class in \c Derived.
\endhtmlonly
As you can see above, the arguments and tokens are returned as <a
- href="http://www.boost.org/doc/libs/1_33_1/libs/range/doc/utility_class.html#iter_range">
+ href="http://www.boost.org/doc/libs/release/libs/range/doc/html/range/reference/utilities/iterator_range.html">
boost::iterator_range</a> instances. These behave much like containers: They have \c begin() and
\c end() and some other useful members.
/** \brief Keyword argument tags
The tags defined in this namespace are used as keyword arguments via the <a
- href="http://www.boost.org/doc/libs/1_33_1/libs/parameter/doc/html/index.html">Boost.Parameter</a>
+ href="http://www.boost.org/doc/libs/release/libs/parameter/doc/html/index.html">Boost.Parameter</a>
library.
For the keyword tags, the standard C++ scoping rules apply
/**< This member changes the attributes for the current
argument. The attributes are passed to arg() as keyword
arguments using the <a
- href="http://www.boost.org/doc/libs/1_33_1/libs/parameter/doc/html/index.html">Boost.Parameter</a>
+ href="http://www.boost.org/doc/libs/release/libs/parameter/doc/html/index.html">Boost.Parameter</a>
library.
\code
...
This will add the user information to any %senf exception thrown. The Exception is however not a
stream. If you need to do more extensive formating, either use an intermediate string-stream or
- use <a href="http://www.boost.org/libs/format/doc/format.html">Boost.Format</a>:
+ use <a href="http://www.boost.org/doc/libs/release/libs/format/index.html">Boost.Format</a>:
\code
try {
The logging library provides several commands to create %log messages. All these macro commands
take a variable number of arguments. Since this is not supported in a usable way by the C++
preprocessor, the arguments are encoded into a <a
- href="http://www.boost.org/libs/preprocessor/doc/index.html">Boost.Preprocessor</a> like
- sequence:
+ href="http://www.boost.org/doc/libs/release/libs/preprocessor/doc/index.html">Boost.Preprocessor</a>
+ like sequence:
\code
SENF_LOG( (senf::log::Debug)(senf::log::NOTICE)(FroblizerArea)("The log message") );
<table class="listing">
<tr><td>\ref membind</td><td>a simple <a
- href="http://www.boost.org/libs/bind/bind.html">Boost.Bind</a> extension</td></tr>
+ href="http://www.boost.org/doc/libs/release/libs/bind/bind.html">Boost.Bind</a> extension</td></tr>
<tr><td>\ref senfmpl</td><td>Some simple tools which help to solve common meta-programming
tasks</td></tr>
<tr><td>\ref senfpp</td><td>Extensions to the <a
- href="http://www.boost.org/doc/libs/1_33_1/libs/preprocessor/doc/index.html">Boost.Preprocessor</a>
+ href="http://www.boost.org/doc/libs/release/libs/preprocessor/doc/index.html">Boost.Preprocessor</a>
library</td></tr>
<tr><td>\ref typetraits</td><td>Extensions to the <a
- href="http://www.boost.org/doc/libs/1_33_1/doc/html/boost_typetraits.html">Boost.TypeTraits</a>
+ href="http://www.boost.org/doc/libs/release/libs/type_traits/index.html">Boost.TypeTraits</a>
library</td></tr>
<tr><td>\ref boost_parameter</td><td>Utilities concerning the <a
- href="http://www.boost.org/doc/libs/1_33_1/libs/parameter/doc/html/index.html">Boost.Parameter</a>
+ href="http://www.boost.org/doc/libs/release/libs/parameter/doc/html/index.html">Boost.Parameter</a>
library</td></tr>
<tr><td>\ref phoenix_helpers</td><td>Phoenix functors</td></tr>
<table class="listing">
<tr><td>\ref intrusive_refcount</td><td>mixin to simplify writing classes for use with <a
- href="http://www.boost.org/libs/smart_ptr/intrusive_ptr.html">boost::intrusive_ptr</a></td></tr>
+ href="http://www.boost.org/doc/libs/release/libs/smart_ptr/intrusive_ptr.html">boost::intrusive_ptr</a></td></tr>
<tr><td>\ref safe_bool</td><td>a mixin class to provide a really safe replacement for
<tt>operator bool</tt>
parameter is set up by connecting the Statistics instance with an arbitrary statistics
source.
- %Statistics sources are <a href="http://www.boost.org/doc/libs/1_37_0/doc/html/signals.html">
+ %Statistics sources are <a href="http://www.boost.org/doc/libs/release/doc/html/signals.html">
Boost Signals</a> which are emitted periodically to provide new data.
*/
/** \brief Customizable reference count mixin for intrusive_ptr
This class provides a simple internally managed refcount and supplies the <a
- href="http://www.boost.org/libs/smart_ptr/intrusive_ptr.html">boost::intrusive_ptr</a>
+ href="http://www.boost.org/doc/libs/release/libs/smart_ptr/intrusive_ptr.html">boost::intrusive_ptr</a>
required interface. To make a class compatible with \c boost::intrusive_ptr, just derive
publicly from intrusive_refcount_t.
/** \brief Reference count mixin for intrusive_ptr
This class provides a simple internally managed refcount and supplies the <a
- href="http://www.boost.org/libs/smart_ptr/intrusive_ptr.html">boost::intrusive_ptr</a>
+ href="http://www.boost.org/doc/libs/release/libs/smart_ptr/intrusive_ptr.html">boost::intrusive_ptr</a>
required interface. To make a class compatible with \c boost::intrusive_ptr, just derive
publicly from intrusive_refcount.
/** \defgroup boost_parameter Boost.Parameter utilities
Here we define some utilities for the <a
- href="http://www.boost.org/doc/libs/1_33_1/libs/parameter/doc/html/index.html">Boost.Parameter</a>
+ href="http://www.boost.org/doc/libs/release/libs/parameter/doc/html/index.html">Boost.Parameter</a>
library.
*/
This mixin will overload a classes <tt>operator new</tt> and <tt>operator delete</tt> so as
to make the class use the <a
- href="http://www.boost.org/libs/pool/doc/index.html">Boost.Pool</a> memory allocator by
+ href="http://www.boost.org/doc/libs/release/libs/pool/doc/index.html">Boost.Pool</a> memory allocator by
default. Using this allocator does however introduce a few restrictions:
\li The operator is defined for a fixed size. Therefore if you derive from the class <b>you
\endcode
\note pool_alloc_mixin uses the <a
- href="http://www.boost.org/libs/pool/doc/index.html">Boost.Pool</a> <i>singleton
+ href="http://www.boost.org/doc/libs/release/libs/pool/doc/index.html">Boost.Pool</a> <i>singleton
pool</i> interface with the tag <tt>pool_alloc_mixin_tag</tt>. This class is accessible
via the <tt>pool</tt> member. Using this member, it is simple to call relevant pool
functions, e.g. <tt>SomeClass::pool<>::release_memory()</tt>.
help=False,
custom_tests=senfconf.Tests(),
config_h="#/senf/autoconf.hh")
- env.Replace(
- BOOST_VERSION = conf.CheckBoostVersion(),
+ env.SetDefault(
+ BOOST_VERSION = conf.CheckBoostVersion(),
BOOST_VARIANT = conf.CheckBoostVariants( '', 'mt' ),
NEED_BOOST_EXT = not conf.CheckCXXHeader("boost/bimap.hpp"),
HAVE_BOOST_SPIRIT_INCLUDE_CLASSIC_HPP = conf.CheckCXXHeader(