15
15
#ifndef RCLCPP__DYNAMIC_TYPESUPPORT__DYNAMIC_MESSAGE_HPP_
16
16
#define RCLCPP__DYNAMIC_TYPESUPPORT__DYNAMIC_MESSAGE_HPP_
17
17
18
+ #include < rcl/allocator.h>
18
19
#include < rcl/types.h>
19
20
#include < rosidl_dynamic_typesupport/types.h>
20
21
26
27
#include " rclcpp/macros.hpp"
27
28
#include " rclcpp/visibility_control.hpp"
28
29
29
-
30
30
namespace rclcpp
31
31
{
32
32
namespace dynamic_typesupport
33
33
{
34
34
35
-
36
35
class DynamicMessageType ;
37
36
class DynamicMessageTypeBuilder ;
38
37
39
- // / Utility wrapper class for rosidl_dynamic_typesupport_dynamic_data_t *
38
+ // / Utility wrapper class for rosidl_dynamic_typesupport_dynamic_data_t
40
39
/* *
41
40
* This class:
42
- * - Manages the lifetime of the raw pointer.
43
- * - Exposes getter methods to get the raw pointer and shared pointers
41
+ * - Exposes getter methods for the struct
44
42
* - Exposes the underlying serialization support API
45
43
*
46
44
* Ownership:
@@ -67,50 +65,48 @@ class DynamicMessage : public std::enable_shared_from_this<DynamicMessage>
67
65
// the data should be the exact same object managed by the DynamicSerializationSupport,
68
66
// otherwise the lifetime management will not work properly.
69
67
70
- // / Construct a new DynamicMessage with the provided dynamic type builder
68
+ // / Construct a new DynamicMessage with the provided dynamic type builder, using its allocator
71
69
RCLCPP_PUBLIC
72
70
explicit DynamicMessage (std::shared_ptr<DynamicMessageTypeBuilder> dynamic_type_builder);
73
71
74
- // / Construct a new DynamicMessage with the provided dynamic type
72
+ // / Construct a new DynamicMessage with the provided dynamic type builder and allocator
73
+ RCLCPP_PUBLIC
74
+ DynamicMessage (
75
+ std::shared_ptr<DynamicMessageTypeBuilder> dynamic_type_builder,
76
+ rcl_allocator_t allocator);
77
+
78
+ // / Construct a new DynamicMessage with the provided dynamic type, using its allocator
75
79
RCLCPP_PUBLIC
76
80
explicit DynamicMessage (std::shared_ptr<DynamicMessageType> dynamic_type);
77
81
78
- // / Assume ownership of raw pointer
82
+ // / Construct a new DynamicMessage with the provided dynamic type and allocator
79
83
RCLCPP_PUBLIC
80
84
DynamicMessage (
81
- DynamicSerializationSupport::SharedPtr serialization_support ,
82
- rosidl_dynamic_typesupport_dynamic_data_t * rosidl_dynamic_data );
85
+ std::shared_ptr<DynamicMessageType> dynamic_type ,
86
+ rcl_allocator_t allocator );
83
87
84
- // / Copy shared pointer
88
+ // / Assume ownership of struct
85
89
RCLCPP_PUBLIC
86
90
DynamicMessage (
87
91
DynamicSerializationSupport::SharedPtr serialization_support,
88
- std::shared_ptr< rosidl_dynamic_typesupport_dynamic_data_t > rosidl_dynamic_data);
92
+ rosidl_dynamic_typesupport_dynamic_data_t && rosidl_dynamic_data);
89
93
90
94
// / Loaning constructor
91
- // / Must only be called with raw ptr obtained from loaning!
95
+ // / Must only be called with a rosidl dynaimc data object obtained from loaning!
92
96
// NOTE(methylDragon): I'd put this in protected, but I need this exposed to
93
97
// enable_shared_from_this...
94
98
RCLCPP_PUBLIC
95
99
DynamicMessage (
96
100
DynamicMessage::SharedPtr parent_data,
97
- rosidl_dynamic_typesupport_dynamic_data_t * rosidl_loaned_data);
101
+ rosidl_dynamic_typesupport_dynamic_data_t && rosidl_loaned_data);
98
102
99
103
// NOTE(methylDragon): Deliberately no constructor from description to nudge users towards using
100
104
// construction from dynamic type/builder, which is more efficient
101
105
102
- // / Copy constructor
103
- RCLCPP_PUBLIC
104
- DynamicMessage (const DynamicMessage & other);
105
-
106
106
// / Move constructor
107
107
RCLCPP_PUBLIC
108
108
DynamicMessage (DynamicMessage && other) noexcept ;
109
109
110
- // / Copy assignment
111
- RCLCPP_PUBLIC
112
- DynamicMessage & operator =(const DynamicMessage & other);
113
-
114
110
// / Move assignment
115
111
RCLCPP_PUBLIC
116
112
DynamicMessage & operator =(DynamicMessage && other) noexcept ;
@@ -129,21 +125,13 @@ class DynamicMessage : public std::enable_shared_from_this<DynamicMessage>
129
125
get_name () const ;
130
126
131
127
RCLCPP_PUBLIC
132
- rosidl_dynamic_typesupport_dynamic_data_t *
128
+ rosidl_dynamic_typesupport_dynamic_data_t &
133
129
get_rosidl_dynamic_data ();
134
130
135
131
RCLCPP_PUBLIC
136
- const rosidl_dynamic_typesupport_dynamic_data_t *
132
+ const rosidl_dynamic_typesupport_dynamic_data_t &
137
133
get_rosidl_dynamic_data () const ;
138
134
139
- RCLCPP_PUBLIC
140
- std::shared_ptr<rosidl_dynamic_typesupport_dynamic_data_t >
141
- get_shared_rosidl_dynamic_data ();
142
-
143
- RCLCPP_PUBLIC
144
- std::shared_ptr<const rosidl_dynamic_typesupport_dynamic_data_t >
145
- get_shared_rosidl_dynamic_data () const ;
146
-
147
135
RCLCPP_PUBLIC
148
136
DynamicSerializationSupport::SharedPtr
149
137
get_shared_dynamic_serialization_support ();
@@ -176,31 +164,37 @@ class DynamicMessage : public std::enable_shared_from_this<DynamicMessage>
176
164
// METHODS =======================================================================================
177
165
RCLCPP_PUBLIC
178
166
DynamicMessage
179
- clone () const ;
167
+ clone (rcl_allocator_t allocator = rcl_get_default_allocator()) ;
180
168
181
169
RCLCPP_PUBLIC
182
170
DynamicMessage::SharedPtr
183
- clone_shared () const ;
171
+ clone_shared (rcl_allocator_t allocator = rcl_get_default_allocator()) ;
184
172
185
173
RCLCPP_PUBLIC
186
174
DynamicMessage
187
- init_from_type (DynamicMessageType & type) const ;
175
+ init_from_type (
176
+ DynamicMessageType & type, rcl_allocator_t allocator = rcl_get_default_allocator()) const ;
188
177
189
178
RCLCPP_PUBLIC
190
179
DynamicMessage::SharedPtr
191
- init_from_type_shared (DynamicMessageType & type) const ;
180
+ init_from_type_shared (
181
+ DynamicMessageType & type, rcl_allocator_t allocator = rcl_get_default_allocator()) const ;
192
182
193
183
RCLCPP_PUBLIC
194
184
bool
195
185
equals (const DynamicMessage & other) const ;
196
186
197
187
RCLCPP_PUBLIC
198
188
DynamicMessage::SharedPtr
199
- loan_value (rosidl_dynamic_typesupport_member_id_t id);
189
+ loan_value (
190
+ rosidl_dynamic_typesupport_member_id_t id,
191
+ rcl_allocator_t allocator = rcl_get_default_allocator());
200
192
201
193
RCLCPP_PUBLIC
202
194
DynamicMessage::SharedPtr
203
- loan_value (const std::string & name);
195
+ loan_value (
196
+ const std::string & name,
197
+ rcl_allocator_t allocator = rcl_get_default_allocator());
204
198
205
199
RCLCPP_PUBLIC
206
200
void
@@ -232,11 +226,11 @@ class DynamicMessage : public std::enable_shared_from_this<DynamicMessage>
232
226
233
227
RCLCPP_PUBLIC
234
228
bool
235
- serialize (rcl_serialized_message_t * buffer);
229
+ serialize (rcl_serialized_message_t & buffer);
236
230
237
231
RCLCPP_PUBLIC
238
232
bool
239
- deserialize (rcl_serialized_message_t * buffer);
233
+ deserialize (rcl_serialized_message_t & buffer);
240
234
241
235
242
236
// MEMBER ACCESS TEMPLATES =======================================================================
@@ -366,19 +360,27 @@ class DynamicMessage : public std::enable_shared_from_this<DynamicMessage>
366
360
// NESTED MEMBER ACCESS ==========================================================================
367
361
RCLCPP_PUBLIC
368
362
DynamicMessage
369
- get_complex_value (rosidl_dynamic_typesupport_member_id_t id);
363
+ get_complex_value (
364
+ rosidl_dynamic_typesupport_member_id_t id,
365
+ rcl_allocator_t allocator = rcl_get_default_allocator());
370
366
371
367
RCLCPP_PUBLIC
372
368
DynamicMessage
373
- get_complex_value (const std::string & name);
369
+ get_complex_value (
370
+ const std::string & name,
371
+ rcl_allocator_t allocator = rcl_get_default_allocator());
374
372
375
373
RCLCPP_PUBLIC
376
374
DynamicMessage::SharedPtr
377
- get_complex_value_shared (rosidl_dynamic_typesupport_member_id_t id);
375
+ get_complex_value_shared (
376
+ rosidl_dynamic_typesupport_member_id_t id,
377
+ rcl_allocator_t allocator = rcl_get_default_allocator());
378
378
379
379
RCLCPP_PUBLIC
380
380
DynamicMessage::SharedPtr
381
- get_complex_value_shared (const std::string & name);
381
+ get_complex_value_shared (
382
+ const std::string & name,
383
+ rcl_allocator_t allocator = rcl_get_default_allocator());
382
384
383
385
RCLCPP_PUBLIC
384
386
void
@@ -405,14 +407,15 @@ class DynamicMessage : public std::enable_shared_from_this<DynamicMessage>
405
407
// DynamicSerializationSupport
406
408
DynamicSerializationSupport::SharedPtr serialization_support_;
407
409
408
- std::shared_ptr<rosidl_dynamic_typesupport_dynamic_data_t > rosidl_dynamic_data_;
409
-
410
+ rosidl_dynamic_typesupport_dynamic_data_t rosidl_dynamic_data_;
410
411
bool is_loaned_;
411
412
412
413
// Used for returning the loaned value, and lifetime management
413
414
DynamicMessage::SharedPtr parent_data_;
414
415
415
416
private:
417
+ RCLCPP_DISABLE_COPY (DynamicMessage)
418
+
416
419
RCLCPP_PUBLIC
417
420
DynamicMessage ();
418
421
@@ -423,7 +426,6 @@ class DynamicMessage : public std::enable_shared_from_this<DynamicMessage>
423
426
const rosidl_dynamic_typesupport_dynamic_data_t & dynamic_data);
424
427
};
425
428
426
-
427
429
} // namespace dynamic_typesupport
428
430
} // namespace rclcpp
429
431
0 commit comments