mirror of
https://github.com/ETLCPP/etl.git
synced 2026-11-09 14:49:53 +08:00
Merge branch 'hotfix/#845-message_packet-missing-a-copy-constructor' into development
This commit is contained in:
commit
de3091a6bc
@ -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");
|
||||
|
||||
@ -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);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user