45 using message_types = etl::type_list<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>;
50 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
70 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
74 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
81 add_new_message(etl::move(msg));
89 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
94 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
97 template <typename TMessage, typename = typename etl::enable_if<!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> >::value &&
98 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
99 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value,
int>
::type>
100 explicit message_packet(TMessage&& )
104 static constexpr bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> >::value &&
105 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
106 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value);
108 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
114 template <
typename TMessage>
115 explicit message_packet(
const TMessage& ,
typename etl::enable_if<!etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> >::value &&
116 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
117 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value,
int>
::type = 0)
121 static const bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> >::value &&
122 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
123 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::value);
125 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
132 message_packet(
const message_packet& other)
133 : valid(other.is_valid())
137 add_new_message(other.get());
142 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
145 message_packet(message_packet&& other)
146 : valid(other.is_valid())
150 add_new_message(etl::move(other.get()));
158 message_packet& operator =(
const message_packet& rhs)
160 delete_current_message();
161 valid = rhs.is_valid();
164 add_new_message(rhs.get());
171 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
174 message_packet& operator =(message_packet&& rhs)
176 delete_current_message();
177 valid = rhs.is_valid();
180 add_new_message(etl::move(rhs.get()));
191 delete_current_message();
207 bool is_valid()
const
215 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
216 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
217 T9::ID ==
id || T10::ID ==
id || T11::ID ==
id || T12::ID ==
id ||
218 T13::ID ==
id || T14::ID ==
id || T15::ID ==
id || T16::ID == id;
224 return accepts(msg.get_message_id());
228 template <etl::message_
id_t Id>
229 static ETL_CONSTEXPR
bool accepts()
231 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
232 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
233 T9::ID == Id || T10::ID == Id || T11::ID == Id || T12::ID == Id ||
234 T13::ID == Id || T14::ID == Id || T15::ID == Id || T16::ID == Id;
238 template <
typename TMessage>
240 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
243 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
244 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
245 T9::ID == TMessage::ID || T10::ID == TMessage::ID || T11::ID == TMessage::ID || T12::ID == TMessage::ID ||
246 T13::ID == TMessage::ID || T14::ID == TMessage::ID || T15::ID == TMessage::ID || T16::ID == TMessage::ID;
251 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::size,
252 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::alignment
259 void delete_current_message()
265 #if ETL_HAS_VIRTUAL_MESSAGES
268 delete_message(pmsg);
277 switch (pmsg->get_message_id())
279 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
280 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
281 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
282 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
283 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
284 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
285 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
286 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
287 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
288 case T10::ID:
static_cast<const T10*
>(pmsg)->~T10();
break;
289 case T11::ID:
static_cast<const T11*
>(pmsg)->~T11();
break;
290 case T12::ID:
static_cast<const T12*
>(pmsg)->~T12();
break;
291 case T13::ID:
static_cast<const T13*
>(pmsg)->~T13();
break;
292 case T14::ID:
static_cast<const T14*
>(pmsg)->~T14();
break;
293 case T15::ID:
static_cast<const T15*
>(pmsg)->~T15();
break;
294 case T16::ID:
static_cast<const T16*
>(pmsg)->~T16();
break;
295 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
302 const size_t id = msg.get_message_id();
307 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
308 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
309 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
310 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
311 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
312 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
313 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
314 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
315 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
316 case T10::ID: ::new (p) T10(
static_cast<const T10&
>(msg));
break;
317 case T11::ID: ::new (p) T11(
static_cast<const T11&
>(msg));
break;
318 case T12::ID: ::new (p) T12(
static_cast<const T12&
>(msg));
break;
319 case T13::ID: ::new (p) T13(
static_cast<const T13&
>(msg));
break;
320 case T14::ID: ::new (p) T14(
static_cast<const T14&
>(msg));
break;
321 case T15::ID: ::new (p) T15(
static_cast<const T15&
>(msg));
break;
322 case T16::ID: ::new (p) T16(
static_cast<const T16&
>(msg));
break;
323 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
327 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
331 const size_t id = msg.get_message_id();
336 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
337 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
338 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
339 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
340 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
341 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
342 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
343 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
344 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
345 case T10::ID: ::new (p) T10(
static_cast<T10&&
>(msg));
break;
346 case T11::ID: ::new (p) T11(
static_cast<T11&&
>(msg));
break;
347 case T12::ID: ::new (p) T12(
static_cast<T12&&
>(msg));
break;
348 case T13::ID: ::new (p) T13(
static_cast<T13&&
>(msg));
break;
349 case T14::ID: ::new (p) T14(
static_cast<T14&&
>(msg));
break;
350 case T15::ID: ::new (p) T15(
static_cast<T15&&
>(msg));
break;
351 case T16::ID: ::new (p) T16(
static_cast<T16&&
>(msg));
break;
352 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
368 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, void>
373 using message_types = etl::type_list<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>;
378 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
390 add_new_message(msg);
398 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
402 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
409 add_new_message(etl::move(msg));
417 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
422 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
425 template <typename TMessage, typename = typename etl::enable_if<!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> >::value &&
426 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
427 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>::value,
int>
::type>
428 explicit message_packet(TMessage&& )
432 static constexpr bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> >::value &&
433 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
434 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>::value);
436 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
442 template <
typename TMessage>
443 explicit message_packet(
const TMessage& ,
typename etl::enable_if<!etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> >::value &&
444 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
445 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>::value,
int>
::type = 0)
449 static const bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> >::value &&
450 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
451 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>::value);
453 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
460 message_packet(
const message_packet& other)
461 : valid(other.is_valid())
465 add_new_message(other.get());
470 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
473 message_packet(message_packet&& other)
474 : valid(other.is_valid())
478 add_new_message(etl::move(other.get()));
486 message_packet& operator =(
const message_packet& rhs)
488 delete_current_message();
489 valid = rhs.is_valid();
492 add_new_message(rhs.get());
499 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
502 message_packet& operator =(message_packet&& rhs)
504 delete_current_message();
505 valid = rhs.is_valid();
508 add_new_message(etl::move(rhs.get()));
519 delete_current_message();
535 bool is_valid()
const
543 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
544 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
545 T9::ID ==
id || T10::ID ==
id || T11::ID ==
id || T12::ID ==
id ||
546 T13::ID ==
id || T14::ID ==
id || T15::ID == id;
552 return accepts(msg.get_message_id());
556 template <etl::message_
id_t Id>
557 static ETL_CONSTEXPR
bool accepts()
559 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
560 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
561 T9::ID == Id || T10::ID == Id || T11::ID == Id || T12::ID == Id ||
562 T13::ID == Id || T14::ID == Id || T15::ID == Id;
566 template <
typename TMessage>
568 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
571 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
572 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
573 T9::ID == TMessage::ID || T10::ID == TMessage::ID || T11::ID == TMessage::ID || T12::ID == TMessage::ID ||
574 T13::ID == TMessage::ID || T14::ID == TMessage::ID || T15::ID == TMessage::ID;
579 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>::size,
580 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>::alignment
587 void delete_current_message()
594 #if ETL_HAS_VIRTUAL_MESSAGES
597 delete_message(pmsg);
606 switch (pmsg->get_message_id())
608 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
609 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
610 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
611 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
612 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
613 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
614 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
615 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
616 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
617 case T10::ID:
static_cast<const T10*
>(pmsg)->~T10();
break;
618 case T11::ID:
static_cast<const T11*
>(pmsg)->~T11();
break;
619 case T12::ID:
static_cast<const T12*
>(pmsg)->~T12();
break;
620 case T13::ID:
static_cast<const T13*
>(pmsg)->~T13();
break;
621 case T14::ID:
static_cast<const T14*
>(pmsg)->~T14();
break;
622 case T15::ID:
static_cast<const T15*
>(pmsg)->~T15();
break;
623 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
630 const size_t id = msg.get_message_id();
635 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
636 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
637 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
638 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
639 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
640 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
641 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
642 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
643 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
644 case T10::ID: ::new (p) T10(
static_cast<const T10&
>(msg));
break;
645 case T11::ID: ::new (p) T11(
static_cast<const T11&
>(msg));
break;
646 case T12::ID: ::new (p) T12(
static_cast<const T12&
>(msg));
break;
647 case T13::ID: ::new (p) T13(
static_cast<const T13&
>(msg));
break;
648 case T14::ID: ::new (p) T14(
static_cast<const T14&
>(msg));
break;
649 case T15::ID: ::new (p) T15(
static_cast<const T15&
>(msg));
break;
650 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
654 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
658 const size_t id = msg.get_message_id();
663 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
664 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
665 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
666 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
667 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
668 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
669 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
670 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
671 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
672 case T10::ID: ::new (p) T10(
static_cast<T10&&
>(msg));
break;
673 case T11::ID: ::new (p) T11(
static_cast<T11&&
>(msg));
break;
674 case T12::ID: ::new (p) T12(
static_cast<T12&&
>(msg));
break;
675 case T13::ID: ::new (p) T13(
static_cast<T13&&
>(msg));
break;
676 case T14::ID: ::new (p) T14(
static_cast<T14&&
>(msg));
break;
677 case T15::ID: ::new (p) T15(
static_cast<T15&&
>(msg));
break;
694 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, void, void>
699 using message_types = etl::type_list<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>;
704 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
716 add_new_message(msg);
724 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
728 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
735 add_new_message(etl::move(msg));
743 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
748 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
751 template <typename TMessage, typename = typename etl::enable_if<!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> >::value &&
752 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
753 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::value,
int>
::type>
754 explicit message_packet(TMessage&& )
758 static constexpr bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> >::value &&
759 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
760 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::value);
762 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
768 template <
typename TMessage>
769 explicit message_packet(
const TMessage& ,
typename etl::enable_if<!etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> >::value &&
770 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
771 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::value,
int>
::type = 0)
775 static const bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> >::value &&
776 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
777 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::value);
779 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
786 message_packet(
const message_packet& other)
787 : valid(other.is_valid())
791 add_new_message(other.get());
796 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
799 message_packet(message_packet&& other)
800 : valid(other.is_valid())
804 add_new_message(etl::move(other.get()));
812 message_packet& operator =(
const message_packet& rhs)
814 delete_current_message();
815 valid = rhs.is_valid();
818 add_new_message(rhs.get());
825 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
828 message_packet& operator =(message_packet&& rhs)
830 delete_current_message();
831 valid = rhs.is_valid();
834 add_new_message(etl::move(rhs.get()));
845 delete_current_message();
861 bool is_valid()
const
869 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
870 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
871 T9::ID ==
id || T10::ID ==
id || T11::ID ==
id || T12::ID ==
id ||
872 T13::ID ==
id || T14::ID == id;
878 return accepts(msg.get_message_id());
882 template <etl::message_
id_t Id>
883 static ETL_CONSTEXPR
bool accepts()
885 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
886 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
887 T9::ID == Id || T10::ID == Id || T11::ID == Id || T12::ID == Id ||
888 T13::ID == Id || T14::ID == Id;
892 template <
typename TMessage>
894 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
897 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
898 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
899 T9::ID == TMessage::ID || T10::ID == TMessage::ID || T11::ID == TMessage::ID || T12::ID == TMessage::ID ||
900 T13::ID == TMessage::ID || T14::ID == TMessage::ID;
905 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::size,
906 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::alignment
913 void delete_current_message()
920 #if ETL_HAS_VIRTUAL_MESSAGES
923 delete_message(pmsg);
932 switch (pmsg->get_message_id())
934 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
935 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
936 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
937 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
938 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
939 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
940 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
941 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
942 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
943 case T10::ID:
static_cast<const T10*
>(pmsg)->~T10();
break;
944 case T11::ID:
static_cast<const T11*
>(pmsg)->~T11();
break;
945 case T12::ID:
static_cast<const T12*
>(pmsg)->~T12();
break;
946 case T13::ID:
static_cast<const T13*
>(pmsg)->~T13();
break;
947 case T14::ID:
static_cast<const T14*
>(pmsg)->~T14();
break;
948 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
955 const size_t id = msg.get_message_id();
960 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
961 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
962 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
963 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
964 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
965 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
966 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
967 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
968 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
969 case T10::ID: ::new (p) T10(
static_cast<const T10&
>(msg));
break;
970 case T11::ID: ::new (p) T11(
static_cast<const T11&
>(msg));
break;
971 case T12::ID: ::new (p) T12(
static_cast<const T12&
>(msg));
break;
972 case T13::ID: ::new (p) T13(
static_cast<const T13&
>(msg));
break;
973 case T14::ID: ::new (p) T14(
static_cast<const T14&
>(msg));
break;
974 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
978 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
982 const size_t id = msg.get_message_id();
987 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
988 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
989 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
990 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
991 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
992 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
993 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
994 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
995 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
996 case T10::ID: ::new (p) T10(
static_cast<T10&&
>(msg));
break;
997 case T11::ID: ::new (p) T11(
static_cast<T11&&
>(msg));
break;
998 case T12::ID: ::new (p) T12(
static_cast<T12&&
>(msg));
break;
999 case T13::ID: ::new (p) T13(
static_cast<T13&&
>(msg));
break;
1000 case T14::ID: ::new (p) T14(
static_cast<T14&&
>(msg));
break;
1017 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, void, void, void>
1022 using message_types = etl::type_list<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>;
1027 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
1039 add_new_message(msg);
1047 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
1051 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1058 add_new_message(etl::move(msg));
1066 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
1071 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
1074 template <typename TMessage, typename = typename etl::enable_if<!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> >::value &&
1075 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
1076 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::value,
int>
::type>
1077 explicit message_packet(TMessage&& )
1081 static constexpr bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> >::value &&
1082 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
1083 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::value);
1085 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
1091 template <
typename TMessage>
1092 explicit message_packet(
const TMessage& ,
typename etl::enable_if<!etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> >::value &&
1093 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
1094 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::value,
int>
::type = 0)
1098 static const bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> >::value &&
1099 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
1100 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::value);
1102 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
1109 message_packet(
const message_packet& other)
1110 : valid(other.is_valid())
1114 add_new_message(other.get());
1119 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1122 message_packet(message_packet&& other)
1123 : valid(other.is_valid())
1127 add_new_message(etl::move(other.get()));
1135 message_packet& operator =(
const message_packet& rhs)
1137 delete_current_message();
1138 valid = rhs.is_valid();
1141 add_new_message(rhs.get());
1148 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1151 message_packet& operator =(message_packet&& rhs)
1153 delete_current_message();
1154 valid = rhs.is_valid();
1157 add_new_message(etl::move(rhs.get()));
1168 delete_current_message();
1184 bool is_valid()
const
1192 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
1193 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
1194 T9::ID ==
id || T10::ID ==
id || T11::ID ==
id || T12::ID ==
id ||
1201 return accepts(msg.get_message_id());
1205 template <etl::message_
id_t Id>
1206 static ETL_CONSTEXPR
bool accepts()
1208 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
1209 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
1210 T9::ID == Id || T10::ID == Id || T11::ID == Id || T12::ID == Id ||
1215 template <
typename TMessage>
1216 static ETL_CONSTEXPR
1217 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
1220 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
1221 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
1222 T9::ID == TMessage::ID || T10::ID == TMessage::ID || T11::ID == TMessage::ID || T12::ID == TMessage::ID ||
1223 T13::ID == TMessage::ID;
1228 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::size,
1229 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::alignment
1236 void delete_current_message()
1243 #if ETL_HAS_VIRTUAL_MESSAGES
1246 delete_message(pmsg);
1255 switch (pmsg->get_message_id())
1257 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
1258 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
1259 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
1260 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
1261 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
1262 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
1263 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
1264 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
1265 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
1266 case T10::ID:
static_cast<const T10*
>(pmsg)->~T10();
break;
1267 case T11::ID:
static_cast<const T11*
>(pmsg)->~T11();
break;
1268 case T12::ID:
static_cast<const T12*
>(pmsg)->~T12();
break;
1269 case T13::ID:
static_cast<const T13*
>(pmsg)->~T13();
break;
1270 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
1277 const size_t id = msg.get_message_id();
1282 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
1283 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
1284 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
1285 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
1286 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
1287 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
1288 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
1289 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
1290 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
1291 case T10::ID: ::new (p) T10(
static_cast<const T10&
>(msg));
break;
1292 case T11::ID: ::new (p) T11(
static_cast<const T11&
>(msg));
break;
1293 case T12::ID: ::new (p) T12(
static_cast<const T12&
>(msg));
break;
1294 case T13::ID: ::new (p) T13(
static_cast<const T13&
>(msg));
break;
1295 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
1299 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1303 const size_t id = msg.get_message_id();
1308 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
1309 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
1310 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
1311 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
1312 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
1313 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
1314 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
1315 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
1316 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
1317 case T10::ID: ::new (p) T10(
static_cast<T10&&
>(msg));
break;
1318 case T11::ID: ::new (p) T11(
static_cast<T11&&
>(msg));
break;
1319 case T12::ID: ::new (p) T12(
static_cast<T12&&
>(msg));
break;
1320 case T13::ID: ::new (p) T13(
static_cast<T13&&
>(msg));
break;
1336 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, void, void, void, void>
1341 using message_types = etl::type_list<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>;
1346 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
1358 add_new_message(msg);
1366 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
1370 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1377 add_new_message(etl::move(msg));
1385 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
1390 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
1393 template <typename TMessage, typename = typename etl::enable_if<!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> >::value &&
1394 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
1395 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::value,
int>
::type>
1396 explicit message_packet(TMessage&& )
1400 static constexpr bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> >::value &&
1401 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
1402 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::value);
1404 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
1410 template <
typename TMessage>
1411 explicit message_packet(
const TMessage& ,
typename etl::enable_if<!etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> >::value &&
1412 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
1413 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::value,
int>
::type = 0)
1417 static const bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> >::value &&
1418 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
1419 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::value);
1421 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
1428 message_packet(
const message_packet& other)
1429 : valid(other.is_valid())
1433 add_new_message(other.get());
1438 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1441 message_packet(message_packet&& other)
1442 : valid(other.is_valid())
1446 add_new_message(etl::move(other.get()));
1454 message_packet& operator =(
const message_packet& rhs)
1456 delete_current_message();
1457 valid = rhs.is_valid();
1460 add_new_message(rhs.get());
1467 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1470 message_packet& operator =(message_packet&& rhs)
1472 delete_current_message();
1473 valid = rhs.is_valid();
1476 add_new_message(etl::move(rhs.get()));
1487 delete_current_message();
1503 bool is_valid()
const
1511 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
1512 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
1513 T9::ID ==
id || T10::ID ==
id || T11::ID ==
id || T12::ID == id;
1519 return accepts(msg.get_message_id());
1523 template <etl::message_
id_t Id>
1524 static ETL_CONSTEXPR
bool accepts()
1526 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
1527 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
1528 T9::ID == Id || T10::ID == Id || T11::ID == Id || T12::ID == Id;
1532 template <
typename TMessage>
1533 static ETL_CONSTEXPR
1534 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
1537 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
1538 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
1539 T9::ID == TMessage::ID || T10::ID == TMessage::ID || T11::ID == TMessage::ID || T12::ID == TMessage::ID;
1544 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::size,
1545 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::alignment
1552 void delete_current_message()
1559 #if ETL_HAS_VIRTUAL_MESSAGES
1562 delete_message(pmsg);
1571 switch (pmsg->get_message_id())
1573 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
1574 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
1575 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
1576 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
1577 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
1578 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
1579 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
1580 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
1581 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
1582 case T10::ID:
static_cast<const T10*
>(pmsg)->~T10();
break;
1583 case T11::ID:
static_cast<const T11*
>(pmsg)->~T11();
break;
1584 case T12::ID:
static_cast<const T12*
>(pmsg)->~T12();
break;
1585 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
1592 const size_t id = msg.get_message_id();
1597 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
1598 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
1599 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
1600 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
1601 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
1602 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
1603 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
1604 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
1605 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
1606 case T10::ID: ::new (p) T10(
static_cast<const T10&
>(msg));
break;
1607 case T11::ID: ::new (p) T11(
static_cast<const T11&
>(msg));
break;
1608 case T12::ID: ::new (p) T12(
static_cast<const T12&
>(msg));
break;
1609 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
1613 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1617 const size_t id = msg.get_message_id();
1622 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
1623 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
1624 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
1625 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
1626 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
1627 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
1628 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
1629 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
1630 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
1631 case T10::ID: ::new (p) T10(
static_cast<T10&&
>(msg));
break;
1632 case T11::ID: ::new (p) T11(
static_cast<T11&&
>(msg));
break;
1633 case T12::ID: ::new (p) T12(
static_cast<T12&&
>(msg));
break;
1649 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, void, void, void, void, void>
1654 using message_types = etl::type_list<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>;
1659 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
1671 add_new_message(msg);
1679 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
1683 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1690 add_new_message(etl::move(msg));
1698 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
1703 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
1706 template <typename TMessage, typename = typename etl::enable_if<!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> >::value &&
1707 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
1708 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::value,
int>
::type>
1709 explicit message_packet(TMessage&& )
1713 static constexpr bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> >::value &&
1714 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
1715 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::value);
1717 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
1723 template <
typename TMessage>
1724 explicit message_packet(
const TMessage& ,
typename etl::enable_if<!etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> >::value &&
1725 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
1726 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::value,
int>
::type = 0)
1730 static const bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> >::value &&
1731 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
1732 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::value);
1734 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
1741 message_packet(
const message_packet& other)
1742 : valid(other.is_valid())
1746 add_new_message(other.get());
1751 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1754 message_packet(message_packet&& other)
1755 : valid(other.is_valid())
1759 add_new_message(etl::move(other.get()));
1767 message_packet& operator =(
const message_packet& rhs)
1769 delete_current_message();
1770 valid = rhs.is_valid();
1773 add_new_message(rhs.get());
1780 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1783 message_packet& operator =(message_packet&& rhs)
1785 delete_current_message();
1786 valid = rhs.is_valid();
1789 add_new_message(etl::move(rhs.get()));
1800 delete_current_message();
1816 bool is_valid()
const
1824 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
1825 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
1826 T9::ID ==
id || T10::ID ==
id || T11::ID == id;
1832 return accepts(msg.get_message_id());
1836 template <etl::message_
id_t Id>
1837 static ETL_CONSTEXPR
bool accepts()
1839 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
1840 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
1841 T9::ID == Id || T10::ID == Id || T11::ID == Id;
1845 template <
typename TMessage>
1846 static ETL_CONSTEXPR
1847 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
1850 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
1851 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
1852 T9::ID == TMessage::ID || T10::ID == TMessage::ID || T11::ID == TMessage::ID;
1857 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::size,
1858 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::alignment
1865 void delete_current_message()
1872 #if ETL_HAS_VIRTUAL_MESSAGES
1875 delete_message(pmsg);
1884 switch (pmsg->get_message_id())
1886 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
1887 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
1888 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
1889 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
1890 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
1891 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
1892 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
1893 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
1894 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
1895 case T10::ID:
static_cast<const T10*
>(pmsg)->~T10();
break;
1896 case T11::ID:
static_cast<const T11*
>(pmsg)->~T11();
break;
1897 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
1904 const size_t id = msg.get_message_id();
1909 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
1910 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
1911 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
1912 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
1913 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
1914 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
1915 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
1916 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
1917 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
1918 case T10::ID: ::new (p) T10(
static_cast<const T10&
>(msg));
break;
1919 case T11::ID: ::new (p) T11(
static_cast<const T11&
>(msg));
break;
1920 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
1924 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1928 const size_t id = msg.get_message_id();
1933 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
1934 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
1935 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
1936 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
1937 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
1938 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
1939 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
1940 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
1941 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
1942 case T10::ID: ::new (p) T10(
static_cast<T10&&
>(msg));
break;
1943 case T11::ID: ::new (p) T11(
static_cast<T11&&
>(msg));
break;
1959 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, void, void, void, void, void, void>
1964 using message_types = etl::type_list<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>;
1969 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
1981 add_new_message(msg);
1989 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
1993 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2000 add_new_message(etl::move(msg));
2008 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
2013 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
2016 template <typename TMessage, typename = typename etl::enable_if<!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >::value &&
2017 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2018 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::value,
int>
::type>
2019 explicit message_packet(TMessage&& )
2023 static constexpr bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >::value &&
2024 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2025 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::value);
2027 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2033 template <
typename TMessage>
2034 explicit message_packet(
const TMessage& ,
typename etl::enable_if<!etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >::value &&
2035 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2036 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::value,
int>
::type = 0)
2040 static const bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >::value &&
2041 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2042 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::value);
2044 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2051 message_packet(
const message_packet& other)
2052 : valid(other.is_valid())
2056 add_new_message(other.get());
2061 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2064 message_packet(message_packet&& other)
2065 : valid(other.is_valid())
2069 add_new_message(etl::move(other.get()));
2077 message_packet& operator =(
const message_packet& rhs)
2079 delete_current_message();
2080 valid = rhs.is_valid();
2083 add_new_message(rhs.get());
2090 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2093 message_packet& operator =(message_packet&& rhs)
2095 delete_current_message();
2096 valid = rhs.is_valid();
2099 add_new_message(etl::move(rhs.get()));
2110 delete_current_message();
2126 bool is_valid()
const
2134 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
2135 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
2136 T9::ID ==
id || T10::ID == id;
2142 return accepts(msg.get_message_id());
2146 template <etl::message_
id_t Id>
2147 static ETL_CONSTEXPR
bool accepts()
2149 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
2150 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
2151 T9::ID == Id || T10::ID == Id;
2155 template <
typename TMessage>
2156 static ETL_CONSTEXPR
2157 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
2160 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
2161 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
2162 T9::ID == TMessage::ID || T10::ID == TMessage::ID;
2167 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::size,
2168 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::alignment
2175 void delete_current_message()
2182 #if ETL_HAS_VIRTUAL_MESSAGES
2185 delete_message(pmsg);
2194 switch (pmsg->get_message_id())
2196 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
2197 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
2198 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
2199 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
2200 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
2201 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
2202 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
2203 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
2204 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
2205 case T10::ID:
static_cast<const T10*
>(pmsg)->~T10();
break;
2206 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
2213 const size_t id = msg.get_message_id();
2218 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
2219 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
2220 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
2221 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
2222 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
2223 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
2224 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
2225 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
2226 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
2227 case T10::ID: ::new (p) T10(
static_cast<const T10&
>(msg));
break;
2228 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
2232 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2236 const size_t id = msg.get_message_id();
2241 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
2242 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
2243 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
2244 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
2245 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
2246 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
2247 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
2248 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
2249 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
2250 case T10::ID: ::new (p) T10(
static_cast<T10&&
>(msg));
break;
2266 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, void, void, void, void, void, void, void>
2271 using message_types = etl::type_list<T1, T2, T3, T4, T5, T6, T7, T8, T9>;
2276 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
2288 add_new_message(msg);
2296 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
2300 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2307 add_new_message(etl::move(msg));
2315 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
2320 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
2323 template <typename TMessage, typename = typename etl::enable_if<!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9> >::value &&
2324 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2325 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9>::value,
int>
::type>
2326 explicit message_packet(TMessage&& )
2331 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2332 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9>::value);
2334 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2340 template <
typename TMessage>
2341 explicit message_packet(
const TMessage& ,
typename etl::enable_if<!etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9> >::value &&
2342 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2343 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9>::value,
int>
::type = 0)
2348 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2349 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9>::value);
2351 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2358 message_packet(
const message_packet& other)
2359 : valid(other.is_valid())
2363 add_new_message(other.get());
2368 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2371 message_packet(message_packet&& other)
2372 : valid(other.is_valid())
2376 add_new_message(etl::move(other.get()));
2384 message_packet& operator =(
const message_packet& rhs)
2386 delete_current_message();
2387 valid = rhs.is_valid();
2390 add_new_message(rhs.get());
2397 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2400 message_packet& operator =(message_packet&& rhs)
2402 delete_current_message();
2403 valid = rhs.is_valid();
2406 add_new_message(etl::move(rhs.get()));
2417 delete_current_message();
2433 bool is_valid()
const
2441 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
2442 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
2449 return accepts(msg.get_message_id());
2453 template <etl::message_
id_t Id>
2454 static ETL_CONSTEXPR
bool accepts()
2456 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
2457 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
2462 template <
typename TMessage>
2463 static ETL_CONSTEXPR
2464 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
2467 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
2468 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
2469 T9::ID == TMessage::ID;
2474 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9>::size,
2475 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9>::alignment
2482 void delete_current_message()
2489 #if ETL_HAS_VIRTUAL_MESSAGES
2492 delete_message(pmsg);
2501 switch (pmsg->get_message_id())
2503 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
2504 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
2505 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
2506 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
2507 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
2508 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
2509 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
2510 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
2511 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
2512 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
2519 const size_t id = msg.get_message_id();
2524 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
2525 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
2526 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
2527 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
2528 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
2529 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
2530 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
2531 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
2532 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
2533 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
2537 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2541 const size_t id = msg.get_message_id();
2546 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
2547 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
2548 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
2549 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
2550 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
2551 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
2552 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
2553 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
2554 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
2569 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, void, void, void, void, void, void, void, void>
2574 using message_types = etl::type_list<T1, T2, T3, T4, T5, T6, T7, T8>;
2579 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
2591 add_new_message(msg);
2599 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
2603 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2610 add_new_message(etl::move(msg));
2618 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
2623 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
2627 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2628 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8>::value,
int>
::type>
2629 explicit message_packet(TMessage&& )
2634 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2635 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8>::value);
2637 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2643 template <
typename TMessage>
2645 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2646 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8>::value,
int>
::type = 0)
2651 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2652 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8>::value);
2654 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2661 message_packet(
const message_packet& other)
2662 : valid(other.is_valid())
2666 add_new_message(other.get());
2671 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2674 message_packet(message_packet&& other)
2675 : valid(other.is_valid())
2679 add_new_message(etl::move(other.get()));
2687 message_packet& operator =(
const message_packet& rhs)
2689 delete_current_message();
2690 valid = rhs.is_valid();
2693 add_new_message(rhs.get());
2700 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2703 message_packet& operator =(message_packet&& rhs)
2705 delete_current_message();
2706 valid = rhs.is_valid();
2709 add_new_message(etl::move(rhs.get()));
2720 delete_current_message();
2736 bool is_valid()
const
2744 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
2745 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID == id;
2751 return accepts(msg.get_message_id());
2755 template <etl::message_
id_t Id>
2756 static ETL_CONSTEXPR
bool accepts()
2758 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
2759 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id;
2763 template <
typename TMessage>
2764 static ETL_CONSTEXPR
2765 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
2768 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
2769 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID;
2774 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8>::size,
2775 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8>::alignment
2782 void delete_current_message()
2789 #if ETL_HAS_VIRTUAL_MESSAGES
2792 delete_message(pmsg);
2801 switch (pmsg->get_message_id())
2803 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
2804 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
2805 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
2806 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
2807 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
2808 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
2809 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
2810 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
2811 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
2818 const size_t id = msg.get_message_id();
2823 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
2824 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
2825 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
2826 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
2827 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
2828 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
2829 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
2830 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
2831 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
2835 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2839 const size_t id = msg.get_message_id();
2844 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
2845 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
2846 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
2847 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
2848 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
2849 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
2850 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
2851 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
2866 class message_packet<T1, T2, T3, T4, T5, T6, T7, void, void, void, void, void, void, void, void, void>
2871 using message_types = etl::type_list<T1, T2, T3, T4, T5, T6, T7>;
2876 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
2888 add_new_message(msg);
2896 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
2900 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2907 add_new_message(etl::move(msg));
2915 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
2920 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
2924 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2925 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7>::value,
int>
::type>
2926 explicit message_packet(TMessage&& )
2931 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2932 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7>::value);
2934 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2940 template <
typename TMessage>
2942 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2943 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7>::value,
int>
::type = 0)
2948 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
2949 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7>::value);
2951 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2958 message_packet(
const message_packet& other)
2959 : valid(other.is_valid())
2963 add_new_message(other.get());
2968 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2971 message_packet(message_packet&& other)
2972 : valid(other.is_valid())
2976 add_new_message(etl::move(other.get()));
2984 message_packet& operator =(
const message_packet& rhs)
2986 delete_current_message();
2987 valid = rhs.is_valid();
2990 add_new_message(rhs.get());
2997 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3000 message_packet& operator =(message_packet&& rhs)
3002 delete_current_message();
3003 valid = rhs.is_valid();
3006 add_new_message(etl::move(rhs.get()));
3017 delete_current_message();
3033 bool is_valid()
const
3041 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
3042 T5::ID ==
id || T6::ID ==
id || T7::ID == id;
3048 return accepts(msg.get_message_id());
3052 template <etl::message_
id_t Id>
3053 static ETL_CONSTEXPR
bool accepts()
3055 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
3056 T5::ID == Id || T6::ID == Id || T7::ID == Id;
3060 template <
typename TMessage>
3061 static ETL_CONSTEXPR
3062 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
3065 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
3066 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID;
3071 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7>::size,
3072 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7>::alignment
3079 void delete_current_message()
3086 #if ETL_HAS_VIRTUAL_MESSAGES
3089 delete_message(pmsg);
3098 switch (pmsg->get_message_id())
3100 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
3101 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
3102 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
3103 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
3104 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
3105 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
3106 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
3107 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
3114 const size_t id = msg.get_message_id();
3119 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
3120 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
3121 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
3122 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
3123 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
3124 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
3125 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
3126 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
3130 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3134 const size_t id = msg.get_message_id();
3139 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
3140 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
3141 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
3142 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
3143 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
3144 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
3145 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
3160 class message_packet<T1, T2, T3, T4, T5, T6, void, void, void, void, void, void, void, void, void, void>
3165 using message_types = etl::type_list<T1, T2, T3, T4, T5, T6>;
3170 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
3182 add_new_message(msg);
3190 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
3194 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3201 add_new_message(etl::move(msg));
3209 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
3214 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
3218 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
3219 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6>::value,
int>
::type>
3220 explicit message_packet(TMessage&& )
3225 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
3226 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6>::value);
3228 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
3234 template <
typename TMessage>
3236 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
3237 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6>::value,
int>
::type = 0)
3242 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
3243 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6>::value);
3245 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
3252 message_packet(
const message_packet& other)
3253 : valid(other.is_valid())
3257 add_new_message(other.get());
3262 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3265 message_packet(message_packet&& other)
3266 : valid(other.is_valid())
3270 add_new_message(etl::move(other.get()));
3278 message_packet& operator =(
const message_packet& rhs)
3280 delete_current_message();
3281 valid = rhs.is_valid();
3284 add_new_message(rhs.get());
3291 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3294 message_packet& operator =(message_packet&& rhs)
3296 delete_current_message();
3297 valid = rhs.is_valid();
3300 add_new_message(etl::move(rhs.get()));
3311 delete_current_message();
3327 bool is_valid()
const
3335 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
3336 T5::ID ==
id || T6::ID == id;
3342 return accepts(msg.get_message_id());
3346 template <etl::message_
id_t Id>
3347 static ETL_CONSTEXPR
bool accepts()
3349 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
3350 T5::ID == Id || T6::ID == Id;
3354 template <
typename TMessage>
3355 static ETL_CONSTEXPR
3356 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
3359 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
3360 T5::ID == TMessage::ID || T6::ID == TMessage::ID;
3365 SIZE = etl::largest<T1, T2, T3, T4, T5, T6>::size,
3366 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6>::alignment
3373 void delete_current_message()
3380 #if ETL_HAS_VIRTUAL_MESSAGES
3383 delete_message(pmsg);
3392 switch (pmsg->get_message_id())
3394 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
3395 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
3396 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
3397 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
3398 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
3399 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
3400 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
3407 const size_t id = msg.get_message_id();
3412 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
3413 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
3414 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
3415 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
3416 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
3417 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
3418 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
3422 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3426 const size_t id = msg.get_message_id();
3431 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
3432 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
3433 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
3434 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
3435 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
3436 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
3451 class message_packet<T1, T2, T3, T4, T5, void, void, void, void, void, void, void, void, void, void, void>
3456 using message_types = etl::type_list<T1, T2, T3, T4, T5>;
3461 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
3473 add_new_message(msg);
3481 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
3485 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3492 add_new_message(etl::move(msg));
3500 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
3505 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
3509 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
3510 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5>::value,
int>
::type>
3511 explicit message_packet(TMessage&& )
3516 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
3517 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5>::value);
3519 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
3525 template <
typename TMessage>
3527 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
3528 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5>::value,
int>
::type = 0)
3533 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
3534 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5>::value);
3536 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
3543 message_packet(
const message_packet& other)
3544 : valid(other.is_valid())
3548 add_new_message(other.get());
3553 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3556 message_packet(message_packet&& other)
3557 : valid(other.is_valid())
3561 add_new_message(etl::move(other.get()));
3569 message_packet& operator =(
const message_packet& rhs)
3571 delete_current_message();
3572 valid = rhs.is_valid();
3575 add_new_message(rhs.get());
3582 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3585 message_packet& operator =(message_packet&& rhs)
3587 delete_current_message();
3588 valid = rhs.is_valid();
3591 add_new_message(etl::move(rhs.get()));
3602 delete_current_message();
3618 bool is_valid()
const
3626 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
3633 return accepts(msg.get_message_id());
3637 template <etl::message_
id_t Id>
3638 static ETL_CONSTEXPR
bool accepts()
3640 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
3645 template <
typename TMessage>
3646 static ETL_CONSTEXPR
3647 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
3650 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
3651 T5::ID == TMessage::ID;
3656 SIZE = etl::largest<T1, T2, T3, T4, T5>::size,
3657 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5>::alignment
3664 void delete_current_message()
3671 #if ETL_HAS_VIRTUAL_MESSAGES
3674 delete_message(pmsg);
3683 switch (pmsg->get_message_id())
3685 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
3686 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
3687 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
3688 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
3689 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
3690 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
3697 const size_t id = msg.get_message_id();
3702 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
3703 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
3704 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
3705 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
3706 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
3707 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
3711 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3715 const size_t id = msg.get_message_id();
3720 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
3721 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
3722 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
3723 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
3724 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
3738 class message_packet<T1, T2, T3, T4, void, void, void, void, void, void, void, void, void, void, void, void>
3743 using message_types = etl::type_list<T1, T2, T3, T4>;
3748 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
3760 add_new_message(msg);
3768 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
3772 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3779 add_new_message(etl::move(msg));
3787 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
3792 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
3796 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
3797 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4>::value,
int>
::type>
3798 explicit message_packet(TMessage&& )
3803 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
3804 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4>::value);
3806 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
3812 template <
typename TMessage>
3813 explicit message_packet(
const TMessage& ,
typename etl::enable_if<!etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3, T4> >::value &&
3814 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
3815 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4>::value,
int>
::type = 0)
3820 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
3821 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4>::value);
3823 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
3830 message_packet(
const message_packet& other)
3831 : valid(other.is_valid())
3835 add_new_message(other.get());
3840 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3843 message_packet(message_packet&& other)
3844 : valid(other.is_valid())
3848 add_new_message(etl::move(other.get()));
3856 message_packet& operator =(
const message_packet& rhs)
3858 delete_current_message();
3859 valid = rhs.is_valid();
3862 add_new_message(rhs.get());
3869 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3872 message_packet& operator =(message_packet&& rhs)
3874 delete_current_message();
3875 valid = rhs.is_valid();
3878 add_new_message(etl::move(rhs.get()));
3889 delete_current_message();
3905 bool is_valid()
const
3913 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID == id;
3919 return accepts(msg.get_message_id());
3923 template <etl::message_
id_t Id>
3924 static ETL_CONSTEXPR
bool accepts()
3926 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id;
3930 template <
typename TMessage>
3931 static ETL_CONSTEXPR
3932 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
3935 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID;
3940 SIZE = etl::largest<T1, T2, T3, T4>::size,
3941 ALIGNMENT = etl::largest<T1, T2, T3, T4>::alignment
3948 void delete_current_message()
3955 #if ETL_HAS_VIRTUAL_MESSAGES
3958 delete_message(pmsg);
3967 switch (pmsg->get_message_id())
3969 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
3970 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
3971 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
3972 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
3973 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
3980 const size_t id = msg.get_message_id();
3985 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
3986 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
3987 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
3988 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
3989 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
3993 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3997 const size_t id = msg.get_message_id();
4002 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
4003 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
4004 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
4005 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
4019 class message_packet<T1, T2, T3, void, void, void, void, void, void, void, void, void, void, void, void, void>
4024 using message_types = etl::type_list<T1, T2, T3>;
4029 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
4041 add_new_message(msg);
4049 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
4053 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4060 add_new_message(etl::move(msg));
4068 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
4073 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
4076 template <typename TMessage, typename = typename etl::enable_if<!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3> >::value &&
4077 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
4078 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3>::value,
int>
::type>
4079 explicit message_packet(TMessage&& )
4084 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
4085 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3>::value);
4087 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
4093 template <
typename TMessage>
4094 explicit message_packet(
const TMessage& ,
typename etl::enable_if<!etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3> >::value &&
4095 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
4096 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3>::value,
int>
::type = 0)
4101 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
4102 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3>::value);
4104 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
4111 message_packet(
const message_packet& other)
4112 : valid(other.is_valid())
4116 add_new_message(other.get());
4121 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4124 message_packet(message_packet&& other)
4125 : valid(other.is_valid())
4129 add_new_message(etl::move(other.get()));
4137 message_packet& operator =(
const message_packet& rhs)
4139 delete_current_message();
4140 valid = rhs.is_valid();
4143 add_new_message(rhs.get());
4150 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4153 message_packet& operator =(message_packet&& rhs)
4155 delete_current_message();
4156 valid = rhs.is_valid();
4159 add_new_message(etl::move(rhs.get()));
4170 delete_current_message();
4186 bool is_valid()
const
4194 return T1::ID ==
id || T2::ID ==
id || T3::ID == id;
4200 return accepts(msg.get_message_id());
4204 template <etl::message_
id_t Id>
4205 static ETL_CONSTEXPR
bool accepts()
4207 return T1::ID == Id || T2::ID == Id || T3::ID == Id;
4211 template <
typename TMessage>
4212 static ETL_CONSTEXPR
4213 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
4216 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID;
4221 SIZE = etl::largest<T1, T2, T3>::size,
4222 ALIGNMENT = etl::largest<T1, T2, T3>::alignment
4229 void delete_current_message()
4236 #if ETL_HAS_VIRTUAL_MESSAGES
4239 delete_message(pmsg);
4248 switch (pmsg->get_message_id())
4250 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
4251 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
4252 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
4253 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
4260 const size_t id = msg.get_message_id();
4265 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
4266 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
4267 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
4268 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
4272 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4276 const size_t id = msg.get_message_id();
4281 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
4282 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
4283 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
4297 class message_packet<T1, T2, void, void, void, void, void, void, void, void, void, void, void, void, void, void>
4302 using message_types = etl::type_list<T1, T2>;
4307 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
4319 add_new_message(msg);
4327 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
4331 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4338 add_new_message(etl::move(msg));
4346 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
4351 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
4354 template <typename TMessage, typename = typename etl::enable_if<!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2> >::value &&
4355 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
4356 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2>::value,
int>
::type>
4357 explicit message_packet(TMessage&& )
4361 static constexpr bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2> >::value &&
4362 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
4363 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2>::value);
4365 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
4371 template <
typename TMessage>
4372 explicit message_packet(
const TMessage& ,
typename etl::enable_if<!etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2> >::value &&
4373 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
4374 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2>::value,
int>
::type = 0)
4379 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
4380 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2>::value);
4382 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
4389 message_packet(
const message_packet& other)
4390 : valid(other.is_valid())
4394 add_new_message(other.get());
4399 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4402 message_packet(message_packet&& other)
4403 : valid(other.is_valid())
4407 add_new_message(etl::move(other.get()));
4415 message_packet& operator =(
const message_packet& rhs)
4417 delete_current_message();
4418 valid = rhs.is_valid();
4421 add_new_message(rhs.get());
4428 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4431 message_packet& operator =(message_packet&& rhs)
4433 delete_current_message();
4434 valid = rhs.is_valid();
4437 add_new_message(etl::move(rhs.get()));
4448 delete_current_message();
4464 bool is_valid()
const
4472 return T1::ID ==
id || T2::ID == id;
4478 return accepts(msg.get_message_id());
4482 template <etl::message_
id_t Id>
4483 static ETL_CONSTEXPR
bool accepts()
4485 return T1::ID == Id || T2::ID == Id;
4489 template <
typename TMessage>
4490 static ETL_CONSTEXPR
4491 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
4494 return T1::ID == TMessage::ID || T2::ID == TMessage::ID;
4499 SIZE = etl::largest<T1, T2>::size,
4500 ALIGNMENT = etl::largest<T1, T2>::alignment
4507 void delete_current_message()
4514 #if ETL_HAS_VIRTUAL_MESSAGES
4517 delete_message(pmsg);
4526 switch (pmsg->get_message_id())
4528 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
4529 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
4530 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
4537 const size_t id = msg.get_message_id();
4542 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
4543 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
4544 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
4548 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4552 const size_t id = msg.get_message_id();
4557 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
4558 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
4572 class message_packet<T1, void, void, void, void, void, void, void, void, void, void, void, void, void, void, void>
4577 using message_types = etl::type_list<T1>;
4582 ETL_CONSTEXPR message_packet() ETL_NOEXCEPT
4594 add_new_message(msg);
4602 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
4606 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4613 add_new_message(etl::move(msg));
4621 ETL_ASSERT(valid, ETL_ERROR(unhandled_message_exception));
4626 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
4629 template <typename TMessage, typename = typename etl::enable_if<!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1> >::value &&
4630 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
4631 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1>::value,
int>
::type>
4632 explicit message_packet(TMessage&& )
4636 static constexpr bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1> >::value &&
4637 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
4638 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1>::value);
4640 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
4646 template <
typename TMessage>
4647 explicit message_packet(
const TMessage& ,
typename etl::enable_if<!etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1> >::value &&
4648 !etl::is_same<
typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
4649 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1>::value,
int>
::type = 0)
4653 static const bool Enabled = (!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1> >::value &&
4654 !etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::imessage>::value &&
4655 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1>::value);
4657 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
4664 message_packet(
const message_packet& other)
4665 : valid(other.is_valid())
4669 add_new_message(other.get());
4674 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4677 message_packet(message_packet&& other)
4678 : valid(other.is_valid())
4682 add_new_message(etl::move(other.get()));
4690 message_packet& operator =(
const message_packet& rhs)
4692 delete_current_message();
4693 valid = rhs.is_valid();
4696 add_new_message(rhs.get());
4703 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4706 message_packet& operator =(message_packet&& rhs)
4708 delete_current_message();
4709 valid = rhs.is_valid();
4712 add_new_message(etl::move(rhs.get()));
4723 delete_current_message();
4739 bool is_valid()
const
4747 return T1::ID == id;
4753 return accepts(msg.get_message_id());
4757 template <etl::message_
id_t Id>
4758 static ETL_CONSTEXPR
bool accepts()
4760 return T1::ID == Id;
4764 template <
typename TMessage>
4765 static ETL_CONSTEXPR
4766 typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value,
bool>
::type
4769 return T1::ID == TMessage::ID;
4774 SIZE = etl::largest<T1>::size,
4775 ALIGNMENT = etl::largest<T1>::alignment
4782 void delete_current_message()
4789 #if ETL_HAS_VIRTUAL_MESSAGES
4792 delete_message(pmsg);
4801 switch (pmsg->get_message_id())
4803 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
4804 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
4811 const size_t id = msg.get_message_id();
4816 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
4817 default: ETL_ASSERT_FAIL(ETL_ERROR(unhandled_message_exception));
break;
4821 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4825 const size_t id = msg.get_message_id();
4830 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;