4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
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 Route inline template implementation */
30 #define prefix_ inline
31 ///////////////////////////////cti.p///////////////////////////////////////
33 ///////////////////////////////////////////////////////////////////////////
34 // senf::ppi::Route<Source,Target>
36 template <class Source, class Target>
37 prefix_ senf::ppi::Route<Source,Target>::Route(module::Module & module, Source & source,
39 : Base(module,source,target)
42 ///////////////////////////////////////////////////////////////////////////
43 // senf::ppi::ForwardingRoute
45 ////////////////////////////////////////
49 prefix_ void senf::ppi::ForwardingRoute::registerRoute(T & ob)
51 ob.registerRoute(*this);
55 prefix_ void senf::ppi::ForwardingRoute::unregisterRoute(T & ob)
57 ob.unregisterRoute(*this);
61 prefix_ void senf::ppi::ForwardingRoute::notifyThrottle(T & ob)
67 prefix_ void senf::ppi::ForwardingRoute::notifyUnthrottle(T & ob)
69 ob.notifyUnthrottle();
72 ///////////////////////////////////////////////////////////////////////////
73 // senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>
75 template <class Source, class Target, class Base>
76 prefix_ Source & senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::source()
82 template <class Source, class Target, class Base>
83 prefix_ Target & senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::target()
89 ////////////////////////////////////////
92 template <class Source, class Target, class Base>
93 prefix_ senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::
94 BaseRouteImplementation(module::Module & module, Source & source, Target & target)
95 : Base(module), source_(&source), target_(&target)
98 ////////////////////////////////////////
101 template <class Source, class Target, class Base>
102 prefix_ bool senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::
103 v_hasConnector(connector::Connector const & conn)
106 return isSame(conn, source()) || isSame(conn, target());
109 template <class Source, class Target, class Base>
110 prefix_ bool senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::
111 v_hasEvent(EventDescriptor const & event)
114 return isSame(event, source()) || isSame(event, target());
117 template <class Source, class Target, class Base>
118 prefix_ bool senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::
119 isSame(connector::Connector const & conn, connector::Connector const & other)
122 return &conn == &other;
125 template <class Source, class Target, class Base>
126 prefix_ bool senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::
127 isSame(connector::Connector const & conn, EventDescriptor const & other)
133 template <class Source, class Target, class Base>
134 prefix_ bool senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::
135 isSame(EventDescriptor const & event, connector::Connector const & other)
141 template <class Source, class Target, class Base>
142 prefix_ bool senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::
143 isSame(EventDescriptor const & event, EventDescriptor const & other)
146 return &event == &other;
149 ///////////////////////////////////////////////////////////////////////////
150 // senf::ppi::detail::ForwardingRouteImplementation<Source,Target>
152 ////////////////////////////////////////
155 template <class Source, class Target>
157 senf::ppi::detail::ForwardingRouteImplementation<Source,Target>::
158 ForwardingRouteImplementation(module::Module & module, Source & source, Target & target)
159 : Base(module,source,target)
161 registerRoute(source);
162 registerRoute(target);
165 template <class Source, class Target>
167 senf::ppi::detail::ForwardingRouteImplementation<Source,Target>::
168 ~ForwardingRouteImplementation()
170 unregisterRoute(this->source());
171 unregisterRoute(this->target());
174 ////////////////////////////////////////
177 template <class Source, class Target>
179 prefix_ void senf::ppi::detail::ForwardingRouteImplementation<Source,Target>::
180 notifyThrottle(T & ob, boost::mpl::bool_<true> const &)
182 ForwardingRoute::notifyThrottle(ob);
185 template <class Source, class Target>
187 prefix_ void senf::ppi::detail::ForwardingRouteImplementation<Source,Target>::
188 notifyThrottle(T & ob, boost::mpl::bool_<false> const &)
191 template <class Source, class Target>
193 prefix_ void senf::ppi::detail::ForwardingRouteImplementation<Source,Target>::
194 notifyUnthrottle(T & ob, boost::mpl::bool_<true> const &)
196 ForwardingRoute::notifyUnthrottle(ob);
199 template <class Source, class Target>
201 prefix_ void senf::ppi::detail::ForwardingRouteImplementation<Source,Target>::
202 notifyUnthrottle(T & ob, boost::mpl::bool_<false> const &)
205 template <class Source, class Target>
207 prefix_ bool senf::ppi::detail::ForwardingRouteImplementation<Source,Target>::
208 throttled(T & ob, boost::mpl::bool_<true> const &)
211 return ob.throttled();
214 template <class Source, class Target>
216 prefix_ bool senf::ppi::detail::ForwardingRouteImplementation<Source,Target>::
217 throttled(T & ob, boost::mpl::bool_<false> const &)
223 ///////////////////////////////////////////////////////////////////////////
224 // senf::ppi::detail::RouteImplementation2<Source,Target>
226 ////////////////////////////////////////
229 template <class Source, class Target>
230 prefix_ senf::ppi::detail::RouteImplementation2<Source,Target>::
231 RouteImplementation2(module::Module & module, Source & source, Target & target)
232 : Base(module,source,target)
235 ///////////////////////////////////////////////////////////////////////////
236 // senf::ppi::detail::RouteImplementation<Source,Target>
238 ////////////////////////////////////////
241 template <class Source, class Target>
242 prefix_ senf::ppi::detail::RouteImplementation<Source,Target>::
243 RouteImplementation(module::Module & module, Source & source, Target & target)
244 : Base(module,source,target)
247 ///////////////////////////////cti.e///////////////////////////////////////
254 // comment-column: 40
255 // c-file-style: "senf"
256 // indent-tabs-mode: nil
257 // ispell-local-dictionary: "american"
258 // compile-command: "scons -u test"