4 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
5 // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
6 // Stefan Bund <g0dil@berlios.de>
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 \brief Setup public header */
30 #include <boost/type_traits.hpp>
31 #include <boost/utility/enable_if.hpp>
34 //#include "Setup.mpp"
35 ///////////////////////////////hh.p////////////////////////////////////////
42 void connect(connector::ActiveOutput & source, connector::PassiveInput & target);
43 void connect(connector::PassiveOutput & source, connector::ActiveInput & target);
45 template <class T, class C>
46 void connect(T & source, C & target,
47 typename boost::disable_if< boost::is_base_of<connector::Connector, T> >::type * = 0,
48 typename boost::enable_if< boost::is_base_of<connector::Connector, C> >::type * = 0);
50 template <class C, class T>
51 void connect(C & source, T & target,
52 typename boost::enable_if< boost::is_base_of<connector::Connector, C> >::type * = 0,
53 typename boost::disable_if< boost::is_base_of<connector::Connector,T> >::type * = 0);
55 template <class T1, class T2>
56 void connect(T1 & source, T2 & target,
57 typename boost::disable_if< boost::is_base_of<connector::Connector, T1> >::type * = 0,
58 typename boost::disable_if< boost::is_base_of<connector::Connector, T2> >::type * = 0);
62 /** \brief Connect modules
64 senf::ppi::connect() establishes a connection between two modules or, to be more precise,
65 between two connectors. For enhanced usability, \a source and \a target may be a Connector,
66 a Module or a collection/subnetwork. Passing a Module or collection/subnetwork as \a source
67 will originate the connection on the \c output member of that Module or collection while
68 passing a module or collection/subnetwork as \a target will terminate the connection on that
69 Module or collections \c input member. For most simple modules, the specification of the
70 connector is therefore obsolete.
72 Furthermore, the connect() call may be extended by special modules (e.g. PassiveJoin which
73 allows an arbitrary of input connections).
75 template <class Source, class Target>
76 void connect(Source & source, Target & target);
80 /** \brief Start the network
82 Calling senf::ppi::run() will start processing the network. The main event loop is managed
83 by the Scheduler. Before starting the Scheduler main loop, all Module init() members are
86 senf::ppi::run() will return when no more work is to be done, that is when no events are
87 enabled (Since the events are enabled and disabled by the throttle notifications which
88 depend among other things on the packet queues, this is the same as checking for packets in
89 any queue). It is Ok to call senf::ppi::run() multiple times during the program lifetime.
93 /** \brief Manually initialize the network
95 For debugging purposes, it is sometimes simpler to not use senf::ppi::run() but instead
96 drive the network via explicit calls using the debug modules. However, it is still necessary
97 to initialize the network. This operation is performed by senf::ppi::init().
103 ///////////////////////////////hh.e////////////////////////////////////////
105 //#include "Setup.ct"
113 // comment-column: 40
114 // c-file-style: "senf"
115 // indent-tabs-mode: nil
116 // ispell-local-dictionary: "american"
117 // compile-command: "scons -u test"