mirror of
https://github.com/ETLCPP/etl.git
synced 2026-04-30 19:09:10 +08:00
Allow creation of a message_packet with no message types
This commit is contained in:
parent
21f68eb7b9
commit
fed1274324
@ -383,6 +383,119 @@ namespace etl
|
||||
bool valid;
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
// The definition for no message types.
|
||||
//***************************************************************************
|
||||
template <>
|
||||
class message_packet<>
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
//template <typename T>
|
||||
//static constexpr bool IsMessagePacket = etl::is_same_v< etl::remove_const_t<etl::remove_reference_t<T>>, etl::message_packet<TMessageTypes...>>;
|
||||
|
||||
template <typename T>
|
||||
static constexpr bool IsInMessageList = false;
|
||||
|
||||
template <typename T>
|
||||
static constexpr bool IsIMessage = etl::is_same_v<remove_const_t<etl::remove_reference_t<T>>, etl::imessage>;
|
||||
|
||||
public:
|
||||
|
||||
using message_types = etl::type_list<>;
|
||||
|
||||
//********************************************
|
||||
#include "private/diagnostic_uninitialized_push.h"
|
||||
message_packet()
|
||||
{
|
||||
}
|
||||
#include "private/diagnostic_pop.h"
|
||||
|
||||
//**********************************************
|
||||
message_packet(const message_packet& other)
|
||||
{
|
||||
}
|
||||
|
||||
#if ETL_USING_CPP11
|
||||
//**********************************************
|
||||
message_packet(message_packet&& other)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
//**********************************************
|
||||
void copy(const message_packet& other)
|
||||
{
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
void copy(message_packet&& other)
|
||||
{
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
#include "private/diagnostic_uninitialized_push.h"
|
||||
message_packet& operator =(const message_packet& rhs)
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
#include "private/diagnostic_pop.h"
|
||||
|
||||
//**********************************************
|
||||
#include "private/diagnostic_uninitialized_push.h"
|
||||
message_packet& operator =(message_packet&& rhs)
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
#include "private/diagnostic_pop.h"
|
||||
|
||||
//********************************************
|
||||
~message_packet()
|
||||
{
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_valid() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
static ETL_CONSTEXPR bool accepts(etl::message_id_t id)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
static ETL_CONSTEXPR bool accepts(const etl::imessage& msg)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
template <etl::message_id_t Id>
|
||||
static ETL_CONSTEXPR bool accepts()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//**********************************************
|
||||
template <typename TMessage>
|
||||
static ETL_CONSTEXPR
|
||||
typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value, bool>::type
|
||||
accepts()
|
||||
{
|
||||
false;
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
SIZE = 0,
|
||||
ALIGNMENT = 1
|
||||
};
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
/// Helper to turn etl::type_list<TTypes...> into etl::message_packet<TTypes...>
|
||||
template <typename TList>
|
||||
@ -5208,6 +5321,63 @@ namespace etl
|
||||
typename etl::aligned_storage<SIZE, ALIGNMENT>::type data;
|
||||
bool valid;
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
// Specialisation for 0 message types.
|
||||
//***************************************************************************
|
||||
template <>
|
||||
class message_packet<void, void, void, void, void, void, void, void,
|
||||
void, void, void, void, void, void, void, void>
|
||||
{
|
||||
public:
|
||||
|
||||
#if ETL_USING_CPP11
|
||||
using message_types = etl::type_list<>;
|
||||
#endif
|
||||
|
||||
message_packet()
|
||||
: valid(false)
|
||||
{
|
||||
}
|
||||
|
||||
static ETL_CONSTEXPR bool accepts(etl::message_id_t)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static ETL_CONSTEXPR bool accepts(const etl::imessage&)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
template <etl::message_id_t Id>
|
||||
static ETL_CONSTEXPR bool accepts()
|
||||
{
|
||||
ETL_UNUSED(Id);
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename TMessage>
|
||||
static ETL_CONSTEXPR typename etl::enable_if<etl::is_base_of<etl::imessage, TMessage>::value, bool>::type accepts()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool is_valid() const
|
||||
{
|
||||
return valid;
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
SIZE = 0U,
|
||||
ALIGNMENT = 1U
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
bool valid;
|
||||
};
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -199,12 +199,12 @@ namespace
|
||||
{
|
||||
};
|
||||
|
||||
using NullPacket = etl::message_packet<>;
|
||||
|
||||
using Packet = etl::message_packet<Message1, Message2, Message3>;
|
||||
|
||||
#if ETL_USING_CPP17 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
|
||||
using MessageTypes = etl::type_list<Message1, Message2, Message3>;
|
||||
using PacketFromMessageTypes = etl::message_packet_from_type_list_t<MessageTypes>;
|
||||
#endif
|
||||
|
||||
struct Object
|
||||
{
|
||||
@ -228,20 +228,16 @@ namespace
|
||||
|
||||
Packet packet1(message1);
|
||||
Packet packet2(message2);
|
||||
#if ETL_USING_CPP17 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
|
||||
PacketFromMessageTypes packet3(message3);
|
||||
#else
|
||||
Packet packet3(message3);
|
||||
#endif
|
||||
NullPacket null_packet;
|
||||
|
||||
// Should cause a static assert.
|
||||
//Packet packet4(message4);
|
||||
//Packet packet4((Message4()));
|
||||
|
||||
CHECK_TRUE((std::is_same<etl::type_list<Message1, Message2, Message3>, typename Packet::message_types>::value));
|
||||
#if ETL_USING_CPP17 && !defined(ETL_MESSAGE_PACKET_FORCE_CPP03_IMPLEMENTATION)
|
||||
CHECK_TRUE((std::is_same<etl::type_list<Message1, Message2, Message3>, typename PacketFromMessageTypes::message_types>::value));
|
||||
#endif
|
||||
CHECK_TRUE((std::is_same<etl::type_list<>, typename NullPacket::message_types>::value));
|
||||
|
||||
CHECK_EQUAL(MESSAGE1, packet1.get().get_message_id());
|
||||
CHECK_EQUAL(MESSAGE2, packet2.get().get_message_id());
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user