// $Id$
//
-// Copyright (C) 2009
+// Copyright (C) 2009
// Fraunhofer Institute for Open Communication Systems (FOKUS)
// Competence Center NETwork research (NET), St. Augustin, GERMANY
// Stefan Bund <g0dil@berlios.de>
namespace senf {
namespace ppi {
-
+
#ifdef DOXYGEN
// For exposition only.
template <class MultiConnectorSource, class Target, class A1>
MultiConnectorSource::ConnectorType & connect(
MultiConnectorSource & source, A1 const & a1, Target & target);
-
+
/** \brief Connect arbitrary source to MultiConnector target
Additional implementations with 0..SENF_MULTI_CONNECTOR_MAX_ARGS arguments.
This mixin provides a module with support for a runtime configurable number of input or
output connectors.
\code
- class MyModule
+ class MyModule
: public senf::ppi::module::Module,
public senf::ppi::module::MultiConnectorMixin<
MyModule, senf::ppi::connector::ActiveInput<> >
route(input, output);
input.onThrottle(&MyModule::doThrottle);
}
-
+
// Optional
void connectorDestroy(senf::ppi::connector::ActiveInput const & input)
{
}
void doThrottle()
- {
+ {
// ...
}
allocate a new connector
\code
MyModule muModule;
-
+
senf::ppi::connect(someModule, myModule);
\endcode
Some modules will expect additional arguments to be passed (see below)
Implementing \c connectorDestroy now is \e mandatory. The signature is changed to take a
pointer as argument
\code
- class MyModule
+ class MyModule
: public senf::ppi::module::Module,
public senf::ppi::module::MultiConnectorMixin<
MyModule, senf::ppi::connector::ActiveInput<>, void, void >
successfully, otherwise your code will break.
*/
- template <class Self_,
- class ConnectorType_,
- class KeyType_=void,
+ template <class Self_,
+ class ConnectorType_,
+ class KeyType_=void,
class ContainerType_=typename detail::MultiConnectorDefaultContainer<
KeyType_,ConnectorType_>::type>
- class MultiConnectorMixin
+ class MultiConnectorMixin
: private detail::MultiConnectorSelectBase<ConnectorType_>::type
{
public:
friend class detail::MultiConnectorMixinAccess;
friend class detail::MultiConnectorWrapper<Self_,ConnectorType_>;
-
+
ContainerType_ connectors_;
};
{
public:
typedef ConnectorType_ ConnectorType;
-
+
protected:
typedef ContainerType_ ContainerType;
# include BOOST_PP_ITERATE()
void disconnected(ConnectorType_ const & c);
-
+
friend class detail::MultiConnectorMixinAccess;
friend class detail::MultiConnectorWrapper<Self_,ConnectorType_>;
ContainerType_ connectors_;
};
- template <class Self_,
+ template <class Self_,
class ConnectorType_>
class MultiConnectorMixin<Self_,ConnectorType_,void,void>
: private detail::MultiConnectorSelectBase<ConnectorType_>::type
};
#endif
-
+
}}}
///////////////////////////////hh.e////////////////////////////////////////