410 add_new_message(msg);
422 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
429 add_new_message(etl::move(msg));
442 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
445 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 &&
447 !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>
448 explicit message_packet(TMessage&& )
452 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 &&
454 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);
456 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
462 template <
typename TMessage>
463 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 &&
465 !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)
469 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 &&
471 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);
473 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
480 message_packet(
const message_packet& other)
481 : valid(other.is_valid())
485 add_new_message(other.get());
490 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
493 message_packet(message_packet&& other)
494 : valid(other.is_valid())
498 add_new_message(etl::move(other.get()));
506 message_packet& operator =(
const message_packet& rhs)
508 delete_current_message();
509 valid = rhs.is_valid();
512 add_new_message(rhs.get());
519 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
522 message_packet& operator =(message_packet&& rhs)
524 delete_current_message();
525 valid = rhs.is_valid();
528 add_new_message(etl::move(rhs.get()));
539 delete_current_message();
555 bool is_valid()
const
563 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
564 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
565 T9::ID ==
id || T10::ID ==
id || T11::ID ==
id || T12::ID ==
id ||
566 T13::ID ==
id || T14::ID ==
id || T15::ID ==
id || T16::ID == id;
572 return accepts(msg.get_message_id());
576 template <etl::message_
id_t Id>
577 static ETL_CONSTEXPR
bool accepts()
579 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
580 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
581 T9::ID == Id || T10::ID == Id || T11::ID == Id || T12::ID == Id ||
582 T13::ID == Id || T14::ID == Id || T15::ID == Id || T16::ID == Id;
586 template <
typename TMessage>
591 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
592 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
593 T9::ID == TMessage::ID || T10::ID == TMessage::ID || T11::ID == TMessage::ID || T12::ID == TMessage::ID ||
594 T13::ID == TMessage::ID || T14::ID == TMessage::ID || T15::ID == TMessage::ID || T16::ID == TMessage::ID;
599 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::size,
600 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>::alignment
607 void delete_current_message()
613 #if ETL_HAS_VIRTUAL_MESSAGES
616 delete_message(pmsg);
625 switch (pmsg->get_message_id())
627 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
628 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
629 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
630 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
631 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
632 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
633 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
634 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
635 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
636 case T10::ID:
static_cast<const T10*
>(pmsg)->~T10();
break;
637 case T11::ID:
static_cast<const T11*
>(pmsg)->~T11();
break;
638 case T12::ID:
static_cast<const T12*
>(pmsg)->~T12();
break;
639 case T13::ID:
static_cast<const T13*
>(pmsg)->~T13();
break;
640 case T14::ID:
static_cast<const T14*
>(pmsg)->~T14();
break;
641 case T15::ID:
static_cast<const T15*
>(pmsg)->~T15();
break;
642 case T16::ID:
static_cast<const T16*
>(pmsg)->~T16();
break;
650 const size_t id = msg.get_message_id();
655 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
656 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
657 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
658 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
659 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
660 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
661 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
662 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
663 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
664 case T10::ID: ::new (p) T10(
static_cast<const T10&
>(msg));
break;
665 case T11::ID: ::new (p) T11(
static_cast<const T11&
>(msg));
break;
666 case T12::ID: ::new (p) T12(
static_cast<const T12&
>(msg));
break;
667 case T13::ID: ::new (p) T13(
static_cast<const T13&
>(msg));
break;
668 case T14::ID: ::new (p) T14(
static_cast<const T14&
>(msg));
break;
669 case T15::ID: ::new (p) T15(
static_cast<const T15&
>(msg));
break;
670 case T16::ID: ::new (p) T16(
static_cast<const T16&
>(msg));
break;
675 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
679 const size_t id = msg.get_message_id();
684 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
685 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
686 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
687 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
688 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
689 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
690 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
691 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
692 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
693 case T10::ID: ::new (p) T10(
static_cast<T10&&
>(msg));
break;
694 case T11::ID: ::new (p) T11(
static_cast<T11&&
>(msg));
break;
695 case T12::ID: ::new (p) T12(
static_cast<T12&&
>(msg));
break;
696 case T13::ID: ::new (p) T13(
static_cast<T13&&
>(msg));
break;
697 case T14::ID: ::new (p) T14(
static_cast<T14&&
>(msg));
break;
698 case T15::ID: ::new (p) T15(
static_cast<T15&&
>(msg));
break;
699 case T16::ID: ::new (p) T16(
static_cast<T16&&
>(msg));
break;
716 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, void>
734 add_new_message(msg);
746 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
753 add_new_message(etl::move(msg));
766 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
769 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 &&
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, T15>::value,
int>
::type>
772 explicit message_packet(TMessage&& )
776 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 &&
778 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);
780 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
786 template <
typename TMessage>
787 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 &&
789 !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)
793 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 &&
795 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);
797 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
804 message_packet(
const message_packet& other)
805 : valid(other.is_valid())
809 add_new_message(other.get());
814 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
817 message_packet(message_packet&& other)
818 : valid(other.is_valid())
822 add_new_message(etl::move(other.get()));
830 message_packet& operator =(
const message_packet& rhs)
832 delete_current_message();
833 valid = rhs.is_valid();
836 add_new_message(rhs.get());
843 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
846 message_packet& operator =(message_packet&& rhs)
848 delete_current_message();
849 valid = rhs.is_valid();
852 add_new_message(etl::move(rhs.get()));
863 delete_current_message();
879 bool is_valid()
const
887 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
888 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
889 T9::ID ==
id || T10::ID ==
id || T11::ID ==
id || T12::ID ==
id ||
890 T13::ID ==
id || T14::ID ==
id || T15::ID == id;
896 return accepts(msg.get_message_id());
900 template <etl::message_
id_t Id>
901 static ETL_CONSTEXPR
bool accepts()
903 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
904 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
905 T9::ID == Id || T10::ID == Id || T11::ID == Id || T12::ID == Id ||
906 T13::ID == Id || T14::ID == Id || T15::ID == Id;
910 template <
typename TMessage>
915 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
916 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
917 T9::ID == TMessage::ID || T10::ID == TMessage::ID || T11::ID == TMessage::ID || T12::ID == TMessage::ID ||
918 T13::ID == TMessage::ID || T14::ID == TMessage::ID || T15::ID == TMessage::ID;
923 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>::size,
924 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>::alignment
931 void delete_current_message()
938 #if ETL_HAS_VIRTUAL_MESSAGES
941 delete_message(pmsg);
950 switch (pmsg->get_message_id())
952 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
953 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
954 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
955 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
956 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
957 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
958 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
959 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
960 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
961 case T10::ID:
static_cast<const T10*
>(pmsg)->~T10();
break;
962 case T11::ID:
static_cast<const T11*
>(pmsg)->~T11();
break;
963 case T12::ID:
static_cast<const T12*
>(pmsg)->~T12();
break;
964 case T13::ID:
static_cast<const T13*
>(pmsg)->~T13();
break;
965 case T14::ID:
static_cast<const T14*
>(pmsg)->~T14();
break;
966 case T15::ID:
static_cast<const T15*
>(pmsg)->~T15();
break;
974 const size_t id = msg.get_message_id();
979 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
980 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
981 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
982 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
983 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
984 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
985 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
986 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
987 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
988 case T10::ID: ::new (p) T10(
static_cast<const T10&
>(msg));
break;
989 case T11::ID: ::new (p) T11(
static_cast<const T11&
>(msg));
break;
990 case T12::ID: ::new (p) T12(
static_cast<const T12&
>(msg));
break;
991 case T13::ID: ::new (p) T13(
static_cast<const T13&
>(msg));
break;
992 case T14::ID: ::new (p) T14(
static_cast<const T14&
>(msg));
break;
993 case T15::ID: ::new (p) T15(
static_cast<const T15&
>(msg));
break;
998 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1002 const size_t id = msg.get_message_id();
1007 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
1008 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
1009 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
1010 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
1011 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
1012 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
1013 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
1014 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
1015 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
1016 case T10::ID: ::new (p) T10(
static_cast<T10&&
>(msg));
break;
1017 case T11::ID: ::new (p) T11(
static_cast<T11&&
>(msg));
break;
1018 case T12::ID: ::new (p) T12(
static_cast<T12&&
>(msg));
break;
1019 case T13::ID: ::new (p) T13(
static_cast<T13&&
>(msg));
break;
1020 case T14::ID: ::new (p) T14(
static_cast<T14&&
>(msg));
break;
1021 case T15::ID: ::new (p) T15(
static_cast<T15&&
>(msg));
break;
1038 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, void, void>
1056 add_new_message(msg);
1068 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1075 add_new_message(etl::move(msg));
1088 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
1091 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 &&
1093 !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>
1094 explicit message_packet(TMessage&& )
1098 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 &&
1100 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);
1102 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
1108 template <
typename TMessage>
1109 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 &&
1111 !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)
1115 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 &&
1117 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);
1119 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
1126 message_packet(
const message_packet& other)
1127 : valid(other.is_valid())
1131 add_new_message(other.get());
1136 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1139 message_packet(message_packet&& other)
1140 : valid(other.is_valid())
1144 add_new_message(etl::move(other.get()));
1152 message_packet& operator =(
const message_packet& rhs)
1154 delete_current_message();
1155 valid = rhs.is_valid();
1158 add_new_message(rhs.get());
1165 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1168 message_packet& operator =(message_packet&& rhs)
1170 delete_current_message();
1171 valid = rhs.is_valid();
1174 add_new_message(etl::move(rhs.get()));
1185 delete_current_message();
1201 bool is_valid()
const
1209 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
1210 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
1211 T9::ID ==
id || T10::ID ==
id || T11::ID ==
id || T12::ID ==
id ||
1212 T13::ID ==
id || T14::ID == id;
1218 return accepts(msg.get_message_id());
1222 template <etl::message_
id_t Id>
1223 static ETL_CONSTEXPR
bool accepts()
1225 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
1226 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
1227 T9::ID == Id || T10::ID == Id || T11::ID == Id || T12::ID == Id ||
1228 T13::ID == Id || T14::ID == Id;
1232 template <
typename TMessage>
1233 static ETL_CONSTEXPR
1237 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
1238 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
1239 T9::ID == TMessage::ID || T10::ID == TMessage::ID || T11::ID == TMessage::ID || T12::ID == TMessage::ID ||
1240 T13::ID == TMessage::ID || T14::ID == TMessage::ID;
1245 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::size,
1246 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::alignment
1253 void delete_current_message()
1260 #if ETL_HAS_VIRTUAL_MESSAGES
1263 delete_message(pmsg);
1272 switch (pmsg->get_message_id())
1274 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
1275 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
1276 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
1277 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
1278 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
1279 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
1280 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
1281 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
1282 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
1283 case T10::ID:
static_cast<const T10*
>(pmsg)->~T10();
break;
1284 case T11::ID:
static_cast<const T11*
>(pmsg)->~T11();
break;
1285 case T12::ID:
static_cast<const T12*
>(pmsg)->~T12();
break;
1286 case T13::ID:
static_cast<const T13*
>(pmsg)->~T13();
break;
1287 case T14::ID:
static_cast<const T14*
>(pmsg)->~T14();
break;
1295 const size_t id = msg.get_message_id();
1300 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
1301 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
1302 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
1303 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
1304 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
1305 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
1306 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
1307 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
1308 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
1309 case T10::ID: ::new (p) T10(
static_cast<const T10&
>(msg));
break;
1310 case T11::ID: ::new (p) T11(
static_cast<const T11&
>(msg));
break;
1311 case T12::ID: ::new (p) T12(
static_cast<const T12&
>(msg));
break;
1312 case T13::ID: ::new (p) T13(
static_cast<const T13&
>(msg));
break;
1313 case T14::ID: ::new (p) T14(
static_cast<const T14&
>(msg));
break;
1318 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1322 const size_t id = msg.get_message_id();
1327 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
1328 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
1329 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
1330 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
1331 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
1332 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
1333 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
1334 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
1335 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
1336 case T10::ID: ::new (p) T10(
static_cast<T10&&
>(msg));
break;
1337 case T11::ID: ::new (p) T11(
static_cast<T11&&
>(msg));
break;
1338 case T12::ID: ::new (p) T12(
static_cast<T12&&
>(msg));
break;
1339 case T13::ID: ::new (p) T13(
static_cast<T13&&
>(msg));
break;
1340 case T14::ID: ::new (p) T14(
static_cast<T14&&
>(msg));
break;
1357 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, void, void, void>
1375 add_new_message(msg);
1387 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1394 add_new_message(etl::move(msg));
1407 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
1410 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 &&
1412 !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>
1413 explicit message_packet(TMessage&& )
1417 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 &&
1419 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::value);
1421 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
1427 template <
typename TMessage>
1428 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 &&
1430 !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)
1434 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 &&
1436 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::value);
1438 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
1445 message_packet(
const message_packet& other)
1446 : valid(other.is_valid())
1450 add_new_message(other.get());
1455 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1458 message_packet(message_packet&& other)
1459 : valid(other.is_valid())
1463 add_new_message(etl::move(other.get()));
1471 message_packet& operator =(
const message_packet& rhs)
1473 delete_current_message();
1474 valid = rhs.is_valid();
1477 add_new_message(rhs.get());
1484 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1487 message_packet& operator =(message_packet&& rhs)
1489 delete_current_message();
1490 valid = rhs.is_valid();
1493 add_new_message(etl::move(rhs.get()));
1504 delete_current_message();
1520 bool is_valid()
const
1528 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
1529 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
1530 T9::ID ==
id || T10::ID ==
id || T11::ID ==
id || T12::ID ==
id ||
1537 return accepts(msg.get_message_id());
1541 template <etl::message_
id_t Id>
1542 static ETL_CONSTEXPR
bool accepts()
1544 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
1545 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
1546 T9::ID == Id || T10::ID == Id || T11::ID == Id || T12::ID == Id ||
1551 template <
typename TMessage>
1552 static ETL_CONSTEXPR
1556 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
1557 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
1558 T9::ID == TMessage::ID || T10::ID == TMessage::ID || T11::ID == TMessage::ID || T12::ID == TMessage::ID ||
1559 T13::ID == TMessage::ID;
1564 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::size,
1565 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::alignment
1572 void delete_current_message()
1579 #if ETL_HAS_VIRTUAL_MESSAGES
1582 delete_message(pmsg);
1591 switch (pmsg->get_message_id())
1593 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
1594 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
1595 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
1596 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
1597 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
1598 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
1599 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
1600 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
1601 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
1602 case T10::ID:
static_cast<const T10*
>(pmsg)->~T10();
break;
1603 case T11::ID:
static_cast<const T11*
>(pmsg)->~T11();
break;
1604 case T12::ID:
static_cast<const T12*
>(pmsg)->~T12();
break;
1605 case T13::ID:
static_cast<const T13*
>(pmsg)->~T13();
break;
1613 const size_t id = msg.get_message_id();
1618 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
1619 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
1620 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
1621 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
1622 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
1623 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
1624 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
1625 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
1626 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
1627 case T10::ID: ::new (p) T10(
static_cast<const T10&
>(msg));
break;
1628 case T11::ID: ::new (p) T11(
static_cast<const T11&
>(msg));
break;
1629 case T12::ID: ::new (p) T12(
static_cast<const T12&
>(msg));
break;
1630 case T13::ID: ::new (p) T13(
static_cast<const T13&
>(msg));
break;
1635 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1639 const size_t id = msg.get_message_id();
1644 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
1645 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
1646 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
1647 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
1648 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
1649 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
1650 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
1651 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
1652 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
1653 case T10::ID: ::new (p) T10(
static_cast<T10&&
>(msg));
break;
1654 case T11::ID: ::new (p) T11(
static_cast<T11&&
>(msg));
break;
1655 case T12::ID: ::new (p) T12(
static_cast<T12&&
>(msg));
break;
1656 case T13::ID: ::new (p) T13(
static_cast<T13&&
>(msg));
break;
1672 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, void, void, void, void>
1690 add_new_message(msg);
1702 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1709 add_new_message(etl::move(msg));
1722 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
1725 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 &&
1727 !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>
1728 explicit message_packet(TMessage&& )
1732 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 &&
1734 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::value);
1736 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
1742 template <
typename TMessage>
1743 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 &&
1745 !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)
1749 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 &&
1751 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::value);
1753 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
1760 message_packet(
const message_packet& other)
1761 : valid(other.is_valid())
1765 add_new_message(other.get());
1770 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1773 message_packet(message_packet&& other)
1774 : valid(other.is_valid())
1778 add_new_message(etl::move(other.get()));
1786 message_packet& operator =(
const message_packet& rhs)
1788 delete_current_message();
1789 valid = rhs.is_valid();
1792 add_new_message(rhs.get());
1799 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1802 message_packet& operator =(message_packet&& rhs)
1804 delete_current_message();
1805 valid = rhs.is_valid();
1808 add_new_message(etl::move(rhs.get()));
1819 delete_current_message();
1835 bool is_valid()
const
1843 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
1844 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
1845 T9::ID ==
id || T10::ID ==
id || T11::ID ==
id || T12::ID == id;
1851 return accepts(msg.get_message_id());
1855 template <etl::message_
id_t Id>
1856 static ETL_CONSTEXPR
bool accepts()
1858 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
1859 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
1860 T9::ID == Id || T10::ID == Id || T11::ID == Id || T12::ID == Id;
1864 template <
typename TMessage>
1865 static ETL_CONSTEXPR
1869 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
1870 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
1871 T9::ID == TMessage::ID || T10::ID == TMessage::ID || T11::ID == TMessage::ID || T12::ID == TMessage::ID;
1876 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::size,
1877 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::alignment
1884 void delete_current_message()
1891 #if ETL_HAS_VIRTUAL_MESSAGES
1894 delete_message(pmsg);
1903 switch (pmsg->get_message_id())
1905 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
1906 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
1907 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
1908 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
1909 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
1910 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
1911 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
1912 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
1913 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
1914 case T10::ID:
static_cast<const T10*
>(pmsg)->~T10();
break;
1915 case T11::ID:
static_cast<const T11*
>(pmsg)->~T11();
break;
1916 case T12::ID:
static_cast<const T12*
>(pmsg)->~T12();
break;
1924 const size_t id = msg.get_message_id();
1929 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
1930 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
1931 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
1932 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
1933 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
1934 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
1935 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
1936 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
1937 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
1938 case T10::ID: ::new (p) T10(
static_cast<const T10&
>(msg));
break;
1939 case T11::ID: ::new (p) T11(
static_cast<const T11&
>(msg));
break;
1940 case T12::ID: ::new (p) T12(
static_cast<const T12&
>(msg));
break;
1945 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
1949 const size_t id = msg.get_message_id();
1954 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
1955 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
1956 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
1957 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
1958 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
1959 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
1960 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
1961 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
1962 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
1963 case T10::ID: ::new (p) T10(
static_cast<T10&&
>(msg));
break;
1964 case T11::ID: ::new (p) T11(
static_cast<T11&&
>(msg));
break;
1965 case T12::ID: ::new (p) T12(
static_cast<T12&&
>(msg));
break;
1981 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, void, void, void, void, void>
1999 add_new_message(msg);
2011 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2018 add_new_message(etl::move(msg));
2031 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
2034 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 &&
2036 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::value,
int>
::type>
2037 explicit message_packet(TMessage&& )
2041 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 &&
2043 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::value);
2045 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2051 template <
typename TMessage>
2052 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 &&
2054 !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)
2058 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 &&
2060 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::value);
2062 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2069 message_packet(
const message_packet& other)
2070 : valid(other.is_valid())
2074 add_new_message(other.get());
2079 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2082 message_packet(message_packet&& other)
2083 : valid(other.is_valid())
2087 add_new_message(etl::move(other.get()));
2095 message_packet& operator =(
const message_packet& rhs)
2097 delete_current_message();
2098 valid = rhs.is_valid();
2101 add_new_message(rhs.get());
2108 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2111 message_packet& operator =(message_packet&& rhs)
2113 delete_current_message();
2114 valid = rhs.is_valid();
2117 add_new_message(etl::move(rhs.get()));
2128 delete_current_message();
2144 bool is_valid()
const
2152 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
2153 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
2154 T9::ID ==
id || T10::ID ==
id || T11::ID == id;
2160 return accepts(msg.get_message_id());
2164 template <etl::message_
id_t Id>
2165 static ETL_CONSTEXPR
bool accepts()
2167 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
2168 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
2169 T9::ID == Id || T10::ID == Id || T11::ID == Id;
2173 template <
typename TMessage>
2174 static ETL_CONSTEXPR
2178 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
2179 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
2180 T9::ID == TMessage::ID || T10::ID == TMessage::ID || T11::ID == TMessage::ID;
2185 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::size,
2186 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::alignment
2193 void delete_current_message()
2200 #if ETL_HAS_VIRTUAL_MESSAGES
2203 delete_message(pmsg);
2212 switch (pmsg->get_message_id())
2214 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
2215 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
2216 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
2217 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
2218 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
2219 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
2220 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
2221 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
2222 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
2223 case T10::ID:
static_cast<const T10*
>(pmsg)->~T10();
break;
2224 case T11::ID:
static_cast<const T11*
>(pmsg)->~T11();
break;
2232 const size_t id = msg.get_message_id();
2237 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
2238 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
2239 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
2240 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
2241 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
2242 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
2243 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
2244 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
2245 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
2246 case T10::ID: ::new (p) T10(
static_cast<const T10&
>(msg));
break;
2247 case T11::ID: ::new (p) T11(
static_cast<const T11&
>(msg));
break;
2252 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2256 const size_t id = msg.get_message_id();
2261 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
2262 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
2263 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
2264 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
2265 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
2266 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
2267 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
2268 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
2269 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
2270 case T10::ID: ::new (p) T10(
static_cast<T10&&
>(msg));
break;
2271 case T11::ID: ::new (p) T11(
static_cast<T11&&
>(msg));
break;
2287 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, void, void, void, void, void, void>
2305 add_new_message(msg);
2317 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2324 add_new_message(etl::move(msg));
2337 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
2340 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 &&
2342 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::value,
int>
::type>
2343 explicit message_packet(TMessage&& )
2347 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 &&
2349 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::value);
2351 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2357 template <
typename TMessage>
2358 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 &&
2360 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::value,
int>
::type = 0)
2364 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 &&
2366 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::value);
2368 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2375 message_packet(
const message_packet& other)
2376 : valid(other.is_valid())
2380 add_new_message(other.get());
2385 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2388 message_packet(message_packet&& other)
2389 : valid(other.is_valid())
2393 add_new_message(etl::move(other.get()));
2401 message_packet& operator =(
const message_packet& rhs)
2403 delete_current_message();
2404 valid = rhs.is_valid();
2407 add_new_message(rhs.get());
2414 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2417 message_packet& operator =(message_packet&& rhs)
2419 delete_current_message();
2420 valid = rhs.is_valid();
2423 add_new_message(etl::move(rhs.get()));
2434 delete_current_message();
2450 bool is_valid()
const
2458 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
2459 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
2460 T9::ID ==
id || T10::ID == id;
2466 return accepts(msg.get_message_id());
2470 template <etl::message_
id_t Id>
2471 static ETL_CONSTEXPR
bool accepts()
2473 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
2474 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
2475 T9::ID == Id || T10::ID == Id;
2479 template <
typename TMessage>
2480 static ETL_CONSTEXPR
2484 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
2485 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
2486 T9::ID == TMessage::ID || T10::ID == TMessage::ID;
2491 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::size,
2492 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::alignment
2499 void delete_current_message()
2506 #if ETL_HAS_VIRTUAL_MESSAGES
2509 delete_message(pmsg);
2518 switch (pmsg->get_message_id())
2520 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
2521 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
2522 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
2523 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
2524 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
2525 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
2526 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
2527 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
2528 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
2529 case T10::ID:
static_cast<const T10*
>(pmsg)->~T10();
break;
2537 const size_t id = msg.get_message_id();
2542 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
2543 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
2544 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
2545 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
2546 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
2547 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
2548 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
2549 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
2550 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
2551 case T10::ID: ::new (p) T10(
static_cast<const T10&
>(msg));
break;
2556 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2560 const size_t id = msg.get_message_id();
2565 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
2566 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
2567 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
2568 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
2569 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
2570 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
2571 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
2572 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
2573 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
2574 case T10::ID: ::new (p) T10(
static_cast<T10&&
>(msg));
break;
2590 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, T9, void, void, void, void, void, void, void>
2608 add_new_message(msg);
2620 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2627 add_new_message(etl::move(msg));
2640 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
2643 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 &&
2645 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9>::value,
int>
::type>
2646 explicit message_packet(TMessage&& )
2652 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9>::value);
2654 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2660 template <
typename TMessage>
2661 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 &&
2663 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8, T9>::value,
int>
::type = 0)
2669 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8, T9>::value);
2671 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2678 message_packet(
const message_packet& other)
2679 : valid(other.is_valid())
2683 add_new_message(other.get());
2688 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2691 message_packet(message_packet&& other)
2692 : valid(other.is_valid())
2696 add_new_message(etl::move(other.get()));
2704 message_packet& operator =(
const message_packet& rhs)
2706 delete_current_message();
2707 valid = rhs.is_valid();
2710 add_new_message(rhs.get());
2717 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2720 message_packet& operator =(message_packet&& rhs)
2722 delete_current_message();
2723 valid = rhs.is_valid();
2726 add_new_message(etl::move(rhs.get()));
2737 delete_current_message();
2753 bool is_valid()
const
2761 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
2762 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID ==
id ||
2769 return accepts(msg.get_message_id());
2773 template <etl::message_
id_t Id>
2774 static ETL_CONSTEXPR
bool accepts()
2776 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
2777 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id ||
2782 template <
typename TMessage>
2783 static ETL_CONSTEXPR
2787 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
2788 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID ||
2789 T9::ID == TMessage::ID;
2794 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9>::size,
2795 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8, T9>::alignment
2802 void delete_current_message()
2809 #if ETL_HAS_VIRTUAL_MESSAGES
2812 delete_message(pmsg);
2821 switch (pmsg->get_message_id())
2823 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
2824 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
2825 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
2826 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
2827 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
2828 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
2829 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
2830 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
2831 case T9::ID:
static_cast<const T9*
>(pmsg)->~T9();
break;
2839 const size_t id = msg.get_message_id();
2844 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
2845 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
2846 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
2847 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
2848 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
2849 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
2850 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
2851 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
2852 case T9::ID: ::new (p) T9(
static_cast<const T9&
>(msg));
break;
2857 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2861 const size_t id = msg.get_message_id();
2866 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
2867 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
2868 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
2869 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
2870 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
2871 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
2872 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
2873 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
2874 case T9::ID: ::new (p) T9(
static_cast<T9&&
>(msg));
break;
2889 class message_packet<T1, T2, T3, T4, T5, T6, T7, T8, void, void, void, void, void, void, void, void>
2907 add_new_message(msg);
2919 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2926 add_new_message(etl::move(msg));
2939 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
2944 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8>::value,
int>
::type>
2945 explicit message_packet(TMessage&& )
2951 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8>::value);
2953 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2959 template <
typename TMessage>
2962 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7, T8>::value,
int>
::type = 0)
2968 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7, T8>::value);
2970 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
2977 message_packet(
const message_packet& other)
2978 : valid(other.is_valid())
2982 add_new_message(other.get());
2987 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
2990 message_packet(message_packet&& other)
2991 : valid(other.is_valid())
2995 add_new_message(etl::move(other.get()));
3003 message_packet& operator =(
const message_packet& rhs)
3005 delete_current_message();
3006 valid = rhs.is_valid();
3009 add_new_message(rhs.get());
3016 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3019 message_packet& operator =(message_packet&& rhs)
3021 delete_current_message();
3022 valid = rhs.is_valid();
3025 add_new_message(etl::move(rhs.get()));
3036 delete_current_message();
3052 bool is_valid()
const
3060 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
3061 T5::ID ==
id || T6::ID ==
id || T7::ID ==
id || T8::ID == id;
3067 return accepts(msg.get_message_id());
3071 template <etl::message_
id_t Id>
3072 static ETL_CONSTEXPR
bool accepts()
3074 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
3075 T5::ID == Id || T6::ID == Id || T7::ID == Id || T8::ID == Id;
3079 template <
typename TMessage>
3080 static ETL_CONSTEXPR
3084 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
3085 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID || T8::ID == TMessage::ID;
3090 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8>::size,
3091 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7, T8>::alignment
3098 void delete_current_message()
3105 #if ETL_HAS_VIRTUAL_MESSAGES
3108 delete_message(pmsg);
3117 switch (pmsg->get_message_id())
3119 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
3120 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
3121 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
3122 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
3123 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
3124 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
3125 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
3126 case T8::ID:
static_cast<const T8*
>(pmsg)->~T8();
break;
3134 const size_t id = msg.get_message_id();
3139 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
3140 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
3141 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
3142 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
3143 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
3144 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
3145 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
3146 case T8::ID: ::new (p) T8(
static_cast<const T8&
>(msg));
break;
3151 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3155 const size_t id = msg.get_message_id();
3160 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
3161 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
3162 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
3163 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
3164 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
3165 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
3166 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
3167 case T8::ID: ::new (p) T8(
static_cast<T8&&
>(msg));
break;
3182 class message_packet<T1, T2, T3, T4, T5, T6, T7, void, void, void, void, void, void, void, void, void>
3200 add_new_message(msg);
3212 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3219 add_new_message(etl::move(msg));
3232 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
3237 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7>::value,
int>
::type>
3238 explicit message_packet(TMessage&& )
3244 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7>::value);
3246 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
3252 template <
typename TMessage>
3255 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6, T7>::value,
int>
::type = 0)
3261 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6, T7>::value);
3263 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
3270 message_packet(
const message_packet& other)
3271 : valid(other.is_valid())
3275 add_new_message(other.get());
3280 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3283 message_packet(message_packet&& other)
3284 : valid(other.is_valid())
3288 add_new_message(etl::move(other.get()));
3296 message_packet& operator =(
const message_packet& rhs)
3298 delete_current_message();
3299 valid = rhs.is_valid();
3302 add_new_message(rhs.get());
3309 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3312 message_packet& operator =(message_packet&& rhs)
3314 delete_current_message();
3315 valid = rhs.is_valid();
3318 add_new_message(etl::move(rhs.get()));
3329 delete_current_message();
3345 bool is_valid()
const
3353 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
3354 T5::ID ==
id || T6::ID ==
id || T7::ID == id;
3360 return accepts(msg.get_message_id());
3364 template <etl::message_
id_t Id>
3365 static ETL_CONSTEXPR
bool accepts()
3367 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
3368 T5::ID == Id || T6::ID == Id || T7::ID == Id;
3372 template <
typename TMessage>
3373 static ETL_CONSTEXPR
3377 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
3378 T5::ID == TMessage::ID || T6::ID == TMessage::ID || T7::ID == TMessage::ID;
3383 SIZE = etl::largest<T1, T2, T3, T4, T5, T6, T7>::size,
3384 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6, T7>::alignment
3391 void delete_current_message()
3398 #if ETL_HAS_VIRTUAL_MESSAGES
3401 delete_message(pmsg);
3410 switch (pmsg->get_message_id())
3412 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
3413 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
3414 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
3415 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
3416 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
3417 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
3418 case T7::ID:
static_cast<const T7*
>(pmsg)->~T7();
break;
3426 const size_t id = msg.get_message_id();
3431 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
3432 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
3433 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
3434 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
3435 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
3436 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
3437 case T7::ID: ::new (p) T7(
static_cast<const T7&
>(msg));
break;
3442 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3446 const size_t id = msg.get_message_id();
3451 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
3452 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
3453 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
3454 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
3455 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
3456 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
3457 case T7::ID: ::new (p) T7(
static_cast<T7&&
>(msg));
break;
3472 class message_packet<T1, T2, T3, T4, T5, T6, void, void, void, void, void, void, void, void, void, void>
3490 add_new_message(msg);
3502 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3509 add_new_message(etl::move(msg));
3522 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
3527 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6>::value,
int>
::type>
3528 explicit message_packet(TMessage&& )
3534 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6>::value);
3536 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
3542 template <
typename TMessage>
3545 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5, T6>::value,
int>
::type = 0)
3551 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5, T6>::value);
3553 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
3560 message_packet(
const message_packet& other)
3561 : valid(other.is_valid())
3565 add_new_message(other.get());
3570 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3573 message_packet(message_packet&& other)
3574 : valid(other.is_valid())
3578 add_new_message(etl::move(other.get()));
3586 message_packet& operator =(
const message_packet& rhs)
3588 delete_current_message();
3589 valid = rhs.is_valid();
3592 add_new_message(rhs.get());
3599 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3602 message_packet& operator =(message_packet&& rhs)
3604 delete_current_message();
3605 valid = rhs.is_valid();
3608 add_new_message(etl::move(rhs.get()));
3619 delete_current_message();
3635 bool is_valid()
const
3643 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
3644 T5::ID ==
id || T6::ID == id;
3650 return accepts(msg.get_message_id());
3654 template <etl::message_
id_t Id>
3655 static ETL_CONSTEXPR
bool accepts()
3657 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
3658 T5::ID == Id || T6::ID == Id;
3662 template <
typename TMessage>
3663 static ETL_CONSTEXPR
3667 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
3668 T5::ID == TMessage::ID || T6::ID == TMessage::ID;
3673 SIZE = etl::largest<T1, T2, T3, T4, T5, T6>::size,
3674 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5, T6>::alignment
3681 void delete_current_message()
3688 #if ETL_HAS_VIRTUAL_MESSAGES
3691 delete_message(pmsg);
3700 switch (pmsg->get_message_id())
3702 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
3703 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
3704 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
3705 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
3706 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
3707 case T6::ID:
static_cast<const T6*
>(pmsg)->~T6();
break;
3715 const size_t id = msg.get_message_id();
3720 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
3721 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
3722 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
3723 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
3724 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
3725 case T6::ID: ::new (p) T6(
static_cast<const T6&
>(msg));
break;
3730 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3734 const size_t id = msg.get_message_id();
3739 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
3740 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
3741 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
3742 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
3743 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
3744 case T6::ID: ::new (p) T6(
static_cast<T6&&
>(msg));
break;
3759 class message_packet<T1, T2, T3, T4, T5, void, void, void, void, void, void, void, void, void, void, void>
3777 add_new_message(msg);
3789 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3796 add_new_message(etl::move(msg));
3809 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
3814 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5>::value,
int>
::type>
3815 explicit message_packet(TMessage&& )
3821 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5>::value);
3823 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
3829 template <
typename TMessage>
3832 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4, T5>::value,
int>
::type = 0)
3838 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4, T5>::value);
3840 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
3847 message_packet(
const message_packet& other)
3848 : valid(other.is_valid())
3852 add_new_message(other.get());
3857 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3860 message_packet(message_packet&& other)
3861 : valid(other.is_valid())
3865 add_new_message(etl::move(other.get()));
3873 message_packet& operator =(
const message_packet& rhs)
3875 delete_current_message();
3876 valid = rhs.is_valid();
3879 add_new_message(rhs.get());
3886 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
3889 message_packet& operator =(message_packet&& rhs)
3891 delete_current_message();
3892 valid = rhs.is_valid();
3895 add_new_message(etl::move(rhs.get()));
3906 delete_current_message();
3922 bool is_valid()
const
3930 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID ==
id ||
3937 return accepts(msg.get_message_id());
3941 template <etl::message_
id_t Id>
3942 static ETL_CONSTEXPR
bool accepts()
3944 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id ||
3949 template <
typename TMessage>
3950 static ETL_CONSTEXPR
3954 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID ||
3955 T5::ID == TMessage::ID;
3960 SIZE = etl::largest<T1, T2, T3, T4, T5>::size,
3961 ALIGNMENT = etl::largest<T1, T2, T3, T4, T5>::alignment
3968 void delete_current_message()
3975 #if ETL_HAS_VIRTUAL_MESSAGES
3978 delete_message(pmsg);
3987 switch (pmsg->get_message_id())
3989 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
3990 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
3991 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
3992 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
3993 case T5::ID:
static_cast<const T5*
>(pmsg)->~T5();
break;
4001 const size_t id = msg.get_message_id();
4006 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
4007 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
4008 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
4009 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
4010 case T5::ID: ::new (p) T5(
static_cast<const T5&
>(msg));
break;
4015 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4019 const size_t id = msg.get_message_id();
4024 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
4025 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
4026 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
4027 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
4028 case T5::ID: ::new (p) T5(
static_cast<T5&&
>(msg));
break;
4042 class message_packet<T1, T2, T3, T4, void, void, void, void, void, void, void, void, void, void, void, void>
4060 add_new_message(msg);
4072 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4079 add_new_message(etl::move(msg));
4092 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
4097 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4>::value,
int>
::type>
4098 explicit message_packet(TMessage&& )
4104 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4>::value);
4106 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
4112 template <
typename TMessage>
4115 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3, T4>::value,
int>
::type = 0)
4121 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3, T4>::value);
4123 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
4130 message_packet(
const message_packet& other)
4131 : valid(other.is_valid())
4135 add_new_message(other.get());
4140 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4143 message_packet(message_packet&& other)
4144 : valid(other.is_valid())
4148 add_new_message(etl::move(other.get()));
4156 message_packet& operator =(
const message_packet& rhs)
4158 delete_current_message();
4159 valid = rhs.is_valid();
4162 add_new_message(rhs.get());
4169 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4172 message_packet& operator =(message_packet&& rhs)
4174 delete_current_message();
4175 valid = rhs.is_valid();
4178 add_new_message(etl::move(rhs.get()));
4189 delete_current_message();
4205 bool is_valid()
const
4213 return T1::ID ==
id || T2::ID ==
id || T3::ID ==
id || T4::ID == id;
4219 return accepts(msg.get_message_id());
4223 template <etl::message_
id_t Id>
4224 static ETL_CONSTEXPR
bool accepts()
4226 return T1::ID == Id || T2::ID == Id || T3::ID == Id || T4::ID == Id;
4230 template <
typename TMessage>
4231 static ETL_CONSTEXPR
4235 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID || T4::ID == TMessage::ID;
4240 SIZE = etl::largest<T1, T2, T3, T4>::size,
4241 ALIGNMENT = etl::largest<T1, T2, T3, T4>::alignment
4248 void delete_current_message()
4255 #if ETL_HAS_VIRTUAL_MESSAGES
4258 delete_message(pmsg);
4267 switch (pmsg->get_message_id())
4269 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
4270 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
4271 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
4272 case T4::ID:
static_cast<const T4*
>(pmsg)->~T4();
break;
4280 const size_t id = msg.get_message_id();
4285 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
4286 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
4287 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
4288 case T4::ID: ::new (p) T4(
static_cast<const T4&
>(msg));
break;
4293 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4297 const size_t id = msg.get_message_id();
4302 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
4303 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
4304 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
4305 case T4::ID: ::new (p) T4(
static_cast<T4&&
>(msg));
break;
4319 class message_packet<T1, T2, T3, void, void, void, void, void, void, void, void, void, void, void, void, void>
4337 add_new_message(msg);
4349 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4356 add_new_message(etl::move(msg));
4369 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
4372 template <typename TMessage, typename = typename etl::enable_if<!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2, T3> >::value &&
4374 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2, T3>::value,
int>
::type>
4375 explicit message_packet(TMessage&& )
4381 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3>::value);
4383 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
4389 template <
typename TMessage>
4392 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2, T3>::value,
int>
::type = 0)
4398 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2, T3>::value);
4400 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
4407 message_packet(
const message_packet& other)
4408 : valid(other.is_valid())
4412 add_new_message(other.get());
4417 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4420 message_packet(message_packet&& other)
4421 : valid(other.is_valid())
4425 add_new_message(etl::move(other.get()));
4433 message_packet& operator =(
const message_packet& rhs)
4435 delete_current_message();
4436 valid = rhs.is_valid();
4439 add_new_message(rhs.get());
4446 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4449 message_packet& operator =(message_packet&& rhs)
4451 delete_current_message();
4452 valid = rhs.is_valid();
4455 add_new_message(etl::move(rhs.get()));
4466 delete_current_message();
4482 bool is_valid()
const
4490 return T1::ID ==
id || T2::ID ==
id || T3::ID == id;
4496 return accepts(msg.get_message_id());
4500 template <etl::message_
id_t Id>
4501 static ETL_CONSTEXPR
bool accepts()
4503 return T1::ID == Id || T2::ID == Id || T3::ID == Id;
4507 template <
typename TMessage>
4508 static ETL_CONSTEXPR
4512 return T1::ID == TMessage::ID || T2::ID == TMessage::ID || T3::ID == TMessage::ID;
4517 SIZE = etl::largest<T1, T2, T3>::size,
4518 ALIGNMENT = etl::largest<T1, T2, T3>::alignment
4525 void delete_current_message()
4532 #if ETL_HAS_VIRTUAL_MESSAGES
4535 delete_message(pmsg);
4544 switch (pmsg->get_message_id())
4546 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
4547 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
4548 case T3::ID:
static_cast<const T3*
>(pmsg)->~T3();
break;
4556 const size_t id = msg.get_message_id();
4561 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
4562 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
4563 case T3::ID: ::new (p) T3(
static_cast<const T3&
>(msg));
break;
4568 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4572 const size_t id = msg.get_message_id();
4577 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
4578 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
4579 case T3::ID: ::new (p) T3(
static_cast<T3&&
>(msg));
break;
4593 class message_packet<T1, T2, void, void, void, void, void, void, void, void, void, void, void, void, void, void>
4611 add_new_message(msg);
4623 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4630 add_new_message(etl::move(msg));
4643 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
4646 template <typename TMessage, typename = typename etl::enable_if<!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1, T2> >::value &&
4648 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1, T2>::value,
int>
::type>
4649 explicit message_packet(TMessage&& )
4655 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2>::value);
4657 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
4663 template <
typename TMessage>
4666 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1, T2>::value,
int>
::type = 0)
4672 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1, T2>::value);
4674 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
4681 message_packet(
const message_packet& other)
4682 : valid(other.is_valid())
4686 add_new_message(other.get());
4691 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4694 message_packet(message_packet&& other)
4695 : valid(other.is_valid())
4699 add_new_message(etl::move(other.get()));
4707 message_packet& operator =(
const message_packet& rhs)
4709 delete_current_message();
4710 valid = rhs.is_valid();
4713 add_new_message(rhs.get());
4720 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4723 message_packet& operator =(message_packet&& rhs)
4725 delete_current_message();
4726 valid = rhs.is_valid();
4729 add_new_message(etl::move(rhs.get()));
4740 delete_current_message();
4756 bool is_valid()
const
4764 return T1::ID ==
id || T2::ID == id;
4770 return accepts(msg.get_message_id());
4774 template <etl::message_
id_t Id>
4775 static ETL_CONSTEXPR
bool accepts()
4777 return T1::ID == Id || T2::ID == Id;
4781 template <
typename TMessage>
4782 static ETL_CONSTEXPR
4786 return T1::ID == TMessage::ID || T2::ID == TMessage::ID;
4791 SIZE = etl::largest<T1, T2>::size,
4792 ALIGNMENT = etl::largest<T1, T2>::alignment
4799 void delete_current_message()
4806 #if ETL_HAS_VIRTUAL_MESSAGES
4809 delete_message(pmsg);
4818 switch (pmsg->get_message_id())
4820 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
4821 case T2::ID:
static_cast<const T2*
>(pmsg)->~T2();
break;
4829 const size_t id = msg.get_message_id();
4834 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
4835 case T2::ID: ::new (p) T2(
static_cast<const T2&
>(msg));
break;
4840 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4844 const size_t id = msg.get_message_id();
4849 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;
4850 case T2::ID: ::new (p) T2(
static_cast<T2&&
>(msg));
break;
4864 class message_packet<T1, void, void, void, void, void, void, void, void, void, void, void, void, void, void, void>
4882 add_new_message(msg);
4894 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4901 add_new_message(etl::move(msg));
4914 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION) && !defined(ETL_COMPILER_GREEN_HILLS)
4917 template <typename TMessage, typename = typename etl::enable_if<!etl::is_same<typename etl::remove_cvref<TMessage>::type,
etl::message_packet<T1> >::value &&
4919 !etl::is_one_of<typename etl::remove_cvref<TMessage>::type, T1>::value,
int>
::type>
4920 explicit message_packet(TMessage&& )
4926 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1>::value);
4928 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
4934 template <
typename TMessage>
4937 !etl::is_one_of<
typename etl::remove_cvref<TMessage>::type, T1>::value,
int>
::type = 0)
4943 etl::is_one_of<typename etl::remove_cvref<TMessage>::type,T1>::value);
4945 ETL_STATIC_ASSERT(Enabled,
"Message not in packet type list");
4952 message_packet(
const message_packet& other)
4953 : valid(other.is_valid())
4957 add_new_message(other.get());
4962 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4965 message_packet(message_packet&& other)
4966 : valid(other.is_valid())
4970 add_new_message(etl::move(other.get()));
4978 message_packet& operator =(
const message_packet& rhs)
4980 delete_current_message();
4981 valid = rhs.is_valid();
4984 add_new_message(rhs.get());
4991 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
4994 message_packet& operator =(message_packet&& rhs)
4996 delete_current_message();
4997 valid = rhs.is_valid();
5000 add_new_message(etl::move(rhs.get()));
5011 delete_current_message();
5027 bool is_valid()
const
5035 return T1::ID == id;
5041 return accepts(msg.get_message_id());
5045 template <etl::message_
id_t Id>
5046 static ETL_CONSTEXPR
bool accepts()
5048 return T1::ID == Id;
5052 template <
typename TMessage>
5053 static ETL_CONSTEXPR
5057 return T1::ID == TMessage::ID;
5062 SIZE = etl::largest<T1>::size,
5063 ALIGNMENT = etl::largest<T1>::alignment
5070 void delete_current_message()
5077 #if ETL_HAS_VIRTUAL_MESSAGES
5080 delete_message(pmsg);
5089 switch (pmsg->get_message_id())
5091 case T1::ID:
static_cast<const T1*
>(pmsg)->~T1();
break;
5099 const size_t id = msg.get_message_id();
5104 case T1::ID: ::new (p) T1(
static_cast<const T1&
>(msg));
break;
5109 #if ETL_USING_CPP11 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
5113 const size_t id = msg.get_message_id();
5118 case T1::ID: ::new (p) T1(
static_cast<T1&&
>(msg));
break;