15 #include "rclcpp/serialized_message.hpp"
19 #include "rclcpp/exceptions.hpp"
20 #include "rclcpp/logging.hpp"
22 #include "rmw/types.h"
30 if (
nullptr == to.buffer) {
31 ret = rmw_serialized_message_init(&to, from.buffer_capacity, &from.allocator);
33 ret = rmw_serialized_message_resize(&to, from.buffer_capacity);
37 rclcpp::exceptions::throw_from_rcl_error(ret);
41 if (to.buffer != from.buffer) {
42 std::memcpy(to.buffer, from.buffer, from.buffer_length);
44 to.buffer_length = from.buffer_length;
54 : serialized_message_(rmw_get_zero_initialized_serialized_message())
56 const auto ret = rmw_serialized_message_init(
57 &serialized_message_, initial_capacity, &allocator);
59 rclcpp::exceptions::throw_from_rcl_error(ret);
68 : serialized_message_(rmw_get_zero_initialized_serialized_message())
70 copy_rcl_message(other, serialized_message_);
74 : serialized_message_(
75 std::exchange(other.serialized_message_, rmw_get_zero_initialized_serialized_message()))
79 : serialized_message_(
80 std::exchange(other, rmw_get_zero_initialized_serialized_message()))
86 copy_rcl_message(other.serialized_message_, serialized_message_);
94 if (&serialized_message_ != &other) {
95 copy_rcl_message(other, serialized_message_);
103 if (
this != &other) {
104 if (
nullptr != serialized_message_.buffer) {
105 const auto fini_ret = rmw_serialized_message_fini(&serialized_message_);
109 "Failed to destroy serialized message: %s", rcl_get_error_string().str);
112 serialized_message_ =
113 std::exchange(other.serialized_message_, rmw_get_zero_initialized_serialized_message());
121 if (&serialized_message_ != &other) {
122 if (
nullptr != serialized_message_.buffer) {
123 const auto fini_ret = rmw_serialized_message_fini(&serialized_message_);
127 "Failed to destroy serialized message: %s", rcl_get_error_string().str);
130 serialized_message_ =
131 std::exchange(other, rmw_get_zero_initialized_serialized_message());
138 if (
nullptr != serialized_message_.buffer) {
139 const auto fini_ret = rmw_serialized_message_fini(&serialized_message_);
143 "Failed to destroy serialized message: %s", rcl_get_error_string().str);
151 return serialized_message_;
156 return serialized_message_;
161 return serialized_message_.buffer_length;
166 return serialized_message_.buffer_capacity;
171 auto ret = rmw_serialized_message_resize(&serialized_message_,
capacity);
173 rclcpp::exceptions::throw_from_rcl_error(ret);
179 auto ret = serialized_message_;
180 serialized_message_ = rmw_get_zero_initialized_serialized_message();
rcutils_allocator_t rcl_allocator_t
Encapsulation of an allocator.
Object oriented version of rcl_serialized_message_t with destructor to avoid memory leaks.
rcl_serialized_message_t release_rcl_serialized_message()
Release the underlying rcl_serialized_message_t.
size_t size() const
Get the size of the serialized data buffer.
virtual ~SerializedMessage()
Destructor for a SerializedMessage.
void reserve(size_t capacity)
Allocate memory in the data buffer.
rcl_serialized_message_t & get_rcl_serialized_message()
Get the underlying rcl_serialized_t handle.
SerializedMessage(const rcl_allocator_t &allocator=rcl_get_default_allocator())
Default constructor for a SerializedMessage.
SerializedMessage & operator=(const SerializedMessage &other)
Copy assignment operator.
size_t capacity() const
Get the size of allocated memory for the data buffer.
Versions of rosidl_typesupport_cpp::get_message_type_support_handle that handle adapted types.
RCLCPP_PUBLIC Logger get_logger(const std::string &name)
Return a named logger.
#define RCL_RET_OK
Success return code.
#define RCL_RET_ERROR
Unspecified error return code.
rmw_serialized_message_t rcl_serialized_message_t
typedef for rmw_serialized_message_t;