84 using etl::imessage_router::receive;
94 if (router.is_consumer())
96 ok = !router_list.full();
102 router_list_t::iterator irouter =
103 etl::upper_bound(router_list.begin(), router_list.end(), router.get_message_router_id(), compare_router_id());
105 router_list.insert(irouter, &router);
117 if (
id == etl::imessage_bus::ALL_MESSAGE_ROUTERS)
123 ETL_OR_STD::pair<router_list_t::iterator, router_list_t::iterator> range =
124 etl::equal_range(router_list.begin(), router_list.end(),
id, compare_router_id());
126 router_list.erase(range.first, range.second);
133 router_list_t::iterator irouter = etl::find(router_list.begin(), router_list.end(), &router);
135 if (irouter != router_list.end())
137 router_list.erase(irouter);
142 virtual void receive(
const etl::imessage& message) ETL_OVERRIDE
144 receive(etl::imessage_router::ALL_MESSAGE_ROUTERS, message);
148 virtual void receive(etl::shared_message shared_msg) ETL_OVERRIDE
150 receive(etl::imessage_router::ALL_MESSAGE_ROUTERS, shared_msg);
154 virtual void receive(etl::message_router_id_t destination_router_id,
const etl::imessage& message) ETL_OVERRIDE
156 switch (destination_router_id)
160 case etl::imessage_router::ALL_MESSAGE_ROUTERS:
162 router_list_t::iterator irouter = router_list.begin();
165 while (irouter != router_list.end())
167 etl::imessage_router& router = **irouter;
169 if (router.accepts(message.get_message_id()))
171 router.receive(message);
184 router_list_t::iterator irouter = router_list.begin();
187 ETL_OR_STD::pair<router_list_t::iterator, router_list_t::iterator> range =
188 etl::equal_range(router_list.begin(), router_list.end(), destination_router_id, compare_router_id());
191 while (range.first != range.second)
193 if ((*(range.first))->accepts(message.get_message_id()))
195 (*(range.first))->receive(message);
203 irouter = etl::lower_bound(router_list.begin(), router_list.end(), etl::imessage_bus::MESSAGE_BUS, compare_router_id());
205 while (irouter != router_list.end())
208 (*irouter)->receive(destination_router_id, message);
227 virtual void receive(etl::message_router_id_t destination_router_id, etl::shared_message shared_msg) ETL_OVERRIDE
229 switch (destination_router_id)
233 case etl::imessage_router::ALL_MESSAGE_ROUTERS:
235 router_list_t::iterator irouter = router_list.begin();
238 while (irouter != router_list.end())
240 etl::imessage_router& router = **irouter;
242 if (router.accepts(shared_msg.get_message().get_message_id()))
244 router.receive(shared_msg);
258 ETL_OR_STD::pair<router_list_t::iterator, router_list_t::iterator> range =
259 etl::equal_range(router_list.begin(), router_list.end(), destination_router_id, compare_router_id());
262 while (range.first != range.second)
264 if ((*(range.first))->accepts(shared_msg.get_message().get_message_id()))
266 (*(range.first))->receive(shared_msg);
274 router_list_t::iterator irouter =
275 etl::lower_bound(router_list.begin(), router_list.end(), etl::imessage_bus::MESSAGE_BUS, compare_router_id());
277 while (irouter != router_list.end())
280 (*irouter)->receive(destination_router_id, shared_msg);
298 using imessage_router::accepts;
307 router_list_t::iterator irouter = router_list.begin();
309 while (irouter != router_list.end())
313 if (router.accepts(
id))
336 return router_list.size();
347 bool is_null_router() const ETL_OVERRIDE
353 bool is_producer() const ETL_OVERRIDE
359 bool is_consumer() const ETL_OVERRIDE
370 : imessage_router(
etl::imessage_router::MESSAGE_BUS)
379 : imessage_router(
etl::imessage_router::MESSAGE_BUS, successor_)
380 , router_list(router_list_)
389 struct compare_router_id
393 return prouter->get_message_router_id() < id;
398 return id < prouter->get_message_router_id();
402 router_list_t& router_list;