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)