From 61c4f3192d742be4c9a7a5f5e2bf84e42b9a6306 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Thu, 3 Jul 2025 15:10:16 +0300 Subject: chore(message): Implement rule of 4 and move implementations from header to source --- src/message.cpp | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) (limited to 'src/message.cpp') diff --git a/src/message.cpp b/src/message.cpp index af3168c..ee1d8fe 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -1,15 +1,43 @@ #include #include "message.h" +/* Private */ + +void Message::free() { + delete[] this->msg; +} + +void Message::copyFrom(const Message& other) { + this->can_id = other.can_id; + this->size = other.size; + this->received = other.received; + + this->msg = new unsigned char[this->size]; + std::memcpy(this->msg, other.msg, this->size); +} + +/* Public */ + Message::Message(unsigned int can_id, const Frame& first_frame) : can_id(can_id), received(0) { this->size = first_frame.get_size(); this->msg = new unsigned char[this->size]; this->receive_frame(first_frame); } -Message::Message(const Message& rhs) : can_id(rhs.can_id), size(rhs.size), received(rhs.received) { - this->msg = new unsigned char[this->size]; - std::memcpy(this->msg, rhs.msg, this->size); +Message::~Message() { + this->free(); +} + +Message::Message(const Message& other) { + this->copyFrom(other); +} + +Message& Message::operator=(const Message& other) { + if (this != &other) { + this->free(); + this->copyFrom(other); + } + return *this; } void Message::receive_frame(const Frame& f) { -- cgit v1.3.1-23-gd82d