83 using etl::imessage_router::receive;
93 if (router.is_consumer())
95 ok = !router_list.full();
101 router_list_t::iterator irouter =
102 etl::upper_bound(router_list.begin(), router_list.end(), router.get_message_router_id(), compare_router_id());
104 router_list.insert(irouter, &router);
116 if (
id == etl::imessage_bus::ALL_MESSAGE_ROUTERS)
122 ETL_OR_STD::pair<router_list_t::iterator, router_list_t::iterator> range =
123 etl::equal_range(router_list.begin(), router_list.end(),
id, compare_router_id());
125 router_list.erase(range.first, range.second);
132 router_list_t::iterator irouter = etl::find(router_list.
begin(), router_list.
end(), &router);
134 if (irouter != router_list.
end())
136 router_list.
erase(irouter);
141 virtual void receive(
const etl::imessage& message) ETL_OVERRIDE
143 receive(etl::imessage_router::ALL_MESSAGE_ROUTERS, message);
147 virtual void receive(etl::shared_message shared_msg) ETL_OVERRIDE
149 receive(etl::imessage_router::ALL_MESSAGE_ROUTERS, shared_msg);
153 virtual void receive(etl::message_router_id_t destination_router_id,
const etl::imessage& message) ETL_OVERRIDE
155 switch (destination_router_id)
159 case etl::imessage_router::ALL_MESSAGE_ROUTERS:
161 router_list_t::iterator irouter = router_list.begin();
164 while (irouter != router_list.end())
166 etl::imessage_router& router = **irouter;
168 if (router.accepts(message.get_message_id()))
170 router.receive(message);
183 router_list_t::iterator irouter = router_list.begin();
186 ETL_OR_STD::pair<router_list_t::iterator, router_list_t::iterator> range =
187 etl::equal_range(router_list.begin(), router_list.end(), destination_router_id, compare_router_id());
190 while (range.first != range.second)
192 if ((*(range.first))->accepts(message.get_message_id()))
194 (*(range.first))->receive(message);
202 irouter = etl::lower_bound(router_list.begin(), router_list.end(), etl::imessage_bus::MESSAGE_BUS, compare_router_id());
204 while (irouter != router_list.end())
207 (*irouter)->receive(destination_router_id, message);
226 virtual void receive(etl::message_router_id_t destination_router_id, etl::shared_message shared_msg) ETL_OVERRIDE
228 switch (destination_router_id)
232 case etl::imessage_router::ALL_MESSAGE_ROUTERS:
234 router_list_t::iterator irouter = router_list.begin();
237 while (irouter != router_list.end())
239 etl::imessage_router& router = **irouter;
241 if (router.accepts(shared_msg.get_message().get_message_id()))
243 router.receive(shared_msg);
257 ETL_OR_STD::pair<router_list_t::iterator, router_list_t::iterator> range =
258 etl::equal_range(router_list.begin(), router_list.end(), destination_router_id, compare_router_id());
261 while (range.first != range.second)
263 if ((*(range.first))->accepts(shared_msg.get_message().get_message_id()))
265 (*(range.first))->receive(shared_msg);
273 router_list_t::iterator irouter =
274 etl::lower_bound(router_list.begin(), router_list.end(), etl::imessage_bus::MESSAGE_BUS, compare_router_id());
276 while (irouter != router_list.end())
279 (*irouter)->receive(destination_router_id, shared_msg);
297 using imessage_router::accepts;
306 router_list_t::iterator irouter = router_list.begin();
308 while (irouter != router_list.end())
312 if (router.accepts(
id))
335 return router_list.
size();
346 bool is_null_router() const ETL_OVERRIDE
352 bool is_producer() const ETL_OVERRIDE
358 bool is_consumer() const ETL_OVERRIDE
369 : imessage_router(
etl::imessage_router::MESSAGE_BUS)
378 : imessage_router(
etl::imessage_router::MESSAGE_BUS, successor_)
379 , router_list(router_list_)
388 struct compare_router_id
392 return prouter->get_message_router_id() < id;
397 return id < prouter->get_message_router_id();
401 router_list_t& router_list;