4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
6 // The contents of this file are subject to the Fraunhofer FOKUS Public License
7 // Version 1.0 (the "License"); you may not use this file except in compliance
8 // with the License. You may obtain a copy of the License at
9 // http://senf.berlios.de/license.html
11 // The Fraunhofer FOKUS Public License Version 1.0 is based on,
12 // but modifies the Mozilla Public License Version 1.1.
13 // See the full license text for the amendments.
15 // Software distributed under the License is distributed on an "AS IS" basis,
16 // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
17 // for the specific language governing rights and limitations under the License.
19 // The Original Code is Fraunhofer FOKUS code.
21 // The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V.
22 // (registered association), Hansastraße 27 c, 80686 Munich, Germany.
23 // All Rights Reserved.
26 // Stefan Bund <g0dil@berlios.de>
29 \brief Module non-inline non-template implementation */
36 #include "Connectors.hh"
38 //#include "Module.mpp"
40 //-/////////////////////////////////////////////////////////////////////////////////////////////////
42 //-/////////////////////////////////////////////////////////////////////////////////////////////////
43 // senf::ppi::module::Module
45 //-/////////////////////////////////////////////////////////////////////////////////////////////////
50 prefix_ senf::ppi::Route<connector::InputConnector, connector::OutputConnector> &
51 senf::ppi::module::Module::route(connector::InputConnector & input,
52 connector::OutputConnector & output)
54 prefix_ senf::ppi::Route<connector::InputConnector, EventDescriptor> &
55 senf::ppi::module::Module::route(connector::InputConnector & input, EventDescriptor & output)
58 prefix_ senf::ppi::RouteRoute<connector::EventDescriptor, connector::OutputConnector> &
59 senf::ppi::module::Module::route(EventDescriptor & input, connector::OutputConnector & output);
63 #define route_impl( Source, Target ) \
64 prefix_ senf::ppi::Route<senf::ppi::Source, senf::ppi::Target> & \
65 senf::ppi::module::Module::route(Source & source, Target & target) \
67 detail::RouteHelper<Source,Target>::route(*this, source, target, source, target); \
68 return static_cast< Route<Source,Target> & >( \
69 addRoute(std::auto_ptr< RouteBase >( \
70 new Route<Source,Target>(*this, source, target)))); \
73 route_impl( connector::GenericPassiveInput, connector::GenericActiveOutput);
74 route_impl( connector::GenericActiveInput, connector::GenericPassiveOutput);
75 route_impl( connector::GenericActiveInput, connector::GenericActiveOutput);
76 route_impl( connector::GenericPassiveInput, connector::GenericPassiveOutput);
77 route_impl( connector::GenericPassiveInput, EventDescriptor);
78 route_impl( connector::GenericActiveInput, EventDescriptor);
79 route_impl( EventDescriptor, connector::GenericPassiveOutput);
80 route_impl( EventDescriptor, connector::GenericActiveOutput);
86 //-/////////////////////////////////////////////////////////////////////////////////////////////////
89 prefix_ void senf::ppi::module::Module::registerConnector(connector::Connector & connector)
91 if (std::find(connectorRegistry_.begin(), connectorRegistry_.end(), &connector)
92 == connectorRegistry_.end()) {
93 connectorRegistry_.push_back(&connector);
94 connector.setModule(*this);
98 prefix_ void senf::ppi::module::Module::unregisterConnector(connector::Connector & connector)
100 ConnectorRegistry::iterator i (std::find(connectorRegistry_.begin(), connectorRegistry_.end(),
102 if (i != connectorRegistry_.end())
103 connectorRegistry_.erase(i);
105 routes_.erase_if(boost::bind(&RouteBase::hasConnector, _1, boost::cref(connector)));
108 prefix_ senf::ppi::RouteBase &
109 senf::ppi::module::Module::addRoute(std::auto_ptr<RouteBase> route)
111 routes_.push_back(route.release());
112 return routes_.back();
115 //-/////////////////////////////////////////////////////////////////////////////////////////////////
118 prefix_ void senf::ppi::module::Module::noroute(connector::Connector & connector)
120 registerConnector(connector);
121 connector.setModule(*this);
124 //-/////////////////////////////////////////////////////////////////////////////////////////////////
126 //#include "Module.mpp"
132 // comment-column: 40
133 // c-file-style: "senf"
134 // indent-tabs-mode: nil
135 // ispell-local-dictionary: "american"
136 // compile-command: "scons -u test"