Merge branch 'hotfix/#845-message_packet-missing-a-copy-constructor' into development

This commit is contained in:
John Wellbelove 2024-02-18 12:08:26 +00:00
commit de3091a6bc
2 changed files with 51 additions and 5 deletions

View File

@ -95,11 +95,35 @@ namespace etl
}
#include "private/diagnostic_pop.h"
//**********************************************
#include "private/diagnostic_uninitialized_push.h"
message_packet(const message_packet& other)
: valid(other.is_valid())
{
if (valid)
{
add_new_message(other.get());
}
}
#include "private/diagnostic_pop.h"
//**********************************************
#include "private/diagnostic_uninitialized_push.h"
message_packet(message_packet&& other)
: valid(other.is_valid())
{
if (valid)
{
add_new_message(etl::move(other.get()));
}
}
#include "private/diagnostic_pop.h"
//********************************************
///
//********************************************
#include "private/diagnostic_uninitialized_push.h"
template <typename T>
template <typename T, typename = typename etl::enable_if<IsIMessage<T> || IsInMessageList<T>>::type>
explicit message_packet(T&& msg)
: valid(true)
{
@ -121,10 +145,6 @@ namespace etl
{
add_new_message_type<T>(etl::forward<T>(msg));
}
else if constexpr (IsMessagePacket<T>)
{
copy(etl::forward<T>(msg));
}
else
{
ETL_STATIC_ASSERT(IsInMessageList<T>, "Message not in packet type list");

View File

@ -194,6 +194,16 @@ namespace
using Packet = etl::message_packet<Message1, Message2, Message3>;
struct Object
{
void Push(const etl::message_packet<Message1, Message2>& p)
{
::new (buffer) etl::message_packet<Message1, Message2>(p);
}
char buffer[100];
};
SUITE(test_message_packet)
{
//*************************************************************************
@ -452,6 +462,22 @@ namespace
CHECK(Packet::accepts<MESSAGE3>());
CHECK(!Packet::accepts<MESSAGE4>());
}
//*************************************************************************
TEST(test_message_packet_push_to_queue_bug_845)
{
using Packet = etl::message_packet<Message1, Message2>;
Object obj;
Message1 message1(1);
Message2 message2(1.2);
Packet packet1(message1);
Packet packet2(message2);
obj.Push(packet1);
obj.Push(packet2);
}
};
}