83 using etl::imessage_router::receive;
93 if (router.is_consumer())
95 ok = !router_list.full();
101 router_list_t::iterator irouter = etl::upper_bound(router_list.begin(),
103 router.get_message_router_id(),
104 compare_router_id());
106 router_list.insert(irouter, &router);
118 if (
id == etl::imessage_bus::ALL_MESSAGE_ROUTERS)
124 ETL_OR_STD::pair<router_list_t::iterator, router_list_t::iterator> range = etl::equal_range(router_list.begin(),
127 compare_router_id());
129 router_list.erase(range.first, range.second);
136 router_list_t::iterator irouter = etl::find(router_list.
begin(),
140 if (irouter != router_list.
end())
142 router_list.
erase(irouter);
147 virtual void receive(
const etl::imessage& message) ETL_OVERRIDE
149 receive(etl::imessage_router::ALL_MESSAGE_ROUTERS, message);
153 virtual void receive(etl::shared_message shared_msg) ETL_OVERRIDE
155 receive(etl::imessage_router::ALL_MESSAGE_ROUTERS, shared_msg);
159 virtual void receive(etl::message_router_id_t destination_router_id,
160 const etl::imessage& message) ETL_OVERRIDE
162 switch (destination_router_id)
166 case etl::imessage_router::ALL_MESSAGE_ROUTERS:
168 router_list_t::iterator irouter = router_list.begin();
171 while (irouter != router_list.end())
173 etl::imessage_router& router = **irouter;
175 if (router.accepts(message.get_message_id()))
177 router.receive(message);
190 router_list_t::iterator irouter = router_list.begin();
193 ETL_OR_STD::pair<router_list_t::iterator, router_list_t::iterator> range = etl::equal_range(router_list.begin(),
195 destination_router_id,
196 compare_router_id());
199 while (range.first != range.second)
201 if ((*(range.first))->accepts(message.get_message_id()))
203 (*(range.first))->receive(message);
211 irouter = etl::lower_bound(router_list.begin(),
213 etl::imessage_bus::MESSAGE_BUS,
214 compare_router_id());
216 while (irouter != router_list.end())
219 (*irouter)->receive(destination_router_id, message);
238 virtual void receive(etl::message_router_id_t destination_router_id,
239 etl::shared_message shared_msg) ETL_OVERRIDE
241 switch (destination_router_id)
245 case etl::imessage_router::ALL_MESSAGE_ROUTERS:
247 router_list_t::iterator irouter = router_list.begin();
250 while (irouter != router_list.end())
252 etl::imessage_router& router = **irouter;
254 if (router.accepts(shared_msg.get_message().get_message_id()))
256 router.receive(shared_msg);
270 ETL_OR_STD::pair<router_list_t::iterator, router_list_t::iterator> range = etl::equal_range(router_list.begin(),
272 destination_router_id,
273 compare_router_id());
276 while (range.first != range.second)
278 if ((*(range.first))->accepts(shared_msg.get_message().get_message_id()))
280 (*(range.first))->receive(shared_msg);
288 router_list_t::iterator irouter = etl::lower_bound(router_list.begin(),
290 etl::imessage_bus::MESSAGE_BUS,
291 compare_router_id());
293 while (irouter != router_list.end())
296 (*irouter)->receive(destination_router_id, shared_msg);
314 using imessage_router::accepts;
323 router_list_t::iterator irouter = router_list.begin();
325 while (irouter != router_list.end())
329 if (router.accepts(
id))
352 return router_list.
size();
362 ETL_DEPRECATED
bool is_null_router() const ETL_OVERRIDE
368 bool is_producer() const ETL_OVERRIDE
374 bool is_consumer() const ETL_OVERRIDE
385 : imessage_router(
etl::imessage_router::MESSAGE_BUS),
394 : imessage_router(
etl::imessage_router::MESSAGE_BUS, successor_),
395 router_list(router_list_)
404 struct compare_router_id
408 return prouter->get_message_router_id() < id;
413 return id < prouter->get_message_router_id();
417 router_list_t& router_list;