#define prefix_
///////////////////////////////cc.p////////////////////////////////////////
-
namespace ppi = senf::ppi;
namespace connector = ppi::connector;
namespace module = ppi::module;
public module::MultiConnectorMixin<MyModule, connector::ActiveOutput<>, void, void>
{
SENF_PPI_MODULE(MyModule);
+ typedef std::vector< boost::shared_ptr<MyModule::ConnectorType> > Connectors;
public:
connector::PassiveInput<> input;
input.onRequest(&MyModule::request);
}
+ Connectors const & connectors() const
+ { return connectors_; }
+
private:
void connectorSetup(std::auto_ptr<ConnectorType> c)
{
connectors_.push_back(boost::shared_ptr<ConnectorType>(c));
}
+ void connectorDestroy(ConnectorType const * c)
+ {
+ Connectors::iterator i (
+ std::find_if(connectors_.begin(), connectors_.end(),
+ boost::bind(&Connectors::value_type::get,_1) == c));
+ if (i != connectors_.end())
+ connectors_.erase(i);
+ }
+
void request()
{
senf::Packet p (input());
(**i)(p);
}
- typedef std::vector< boost::shared_ptr<MyModule::ConnectorType> > Connectors;
Connectors connectors_;
friend class module::MultiConnectorMixin<MyModule, connector::ActiveOutput<>, void, void>;
BOOST_CHECK_EQUAL( sink2.size(), 1u );
BOOST_CHECK( sink1.pop_front() == p );
BOOST_CHECK( sink2.pop_front() == p );
+
+ BOOST_CHECK_EQUAL( module.connectors().size(), 2u );
+ sink1.input.disconnect();
+ BOOST_CHECK_EQUAL( module.connectors().size(), 1u );
}
BOOST_AUTO_UNIT_TEST(multiConnectorMixin_multipleModules)
{
- // This test fails!
- /*
debug::ActiveSource source;
debug::PassiveSink sink;
module::PassiveJoin join1;
ppi::connect(source, join1);
ppi::connect(join1, router);
- ppi::connect(router, join2, 1);
+ ppi::connect(router, 1, join2);
ppi::connect(join2, module);
ppi::connect(module, sink);
source.submit(p);
BOOST_CHECK_EQUAL( sink.size(), 1u );
BOOST_CHECK( sink.pop_front() == p );
- */
}
///////////////////////////////cc.e////////////////////////////////////////