Skip to content

Commit

Permalink
use const void* for service_introspection_message__create handle fns
Browse files Browse the repository at this point in the history
Signed-off-by: Brian Chen <[email protected]>
  • Loading branch information
ihasdapie committed Aug 24, 2022
1 parent 0b50360 commit e2f1e57
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 33 deletions.
19 changes: 2 additions & 17 deletions rosidl_typesupport_fastrtps_c/resource/srv__type_support_c.cpp.em
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@ extern "C"
void * rosidl_typesupport_fastrtps_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__create (
const rosidl_service_introspection_info_t * info,
rcutils_allocator_t * allocator,
void * request_message,
void * response_message,
const void * request_message,
const void * response_message,
bool enable_message_payload)
{
auto * event_msg = static_cast<@event_type *>(allocator->zero_allocate(1, sizeof(@event_type), allocator->state));
Expand Down Expand Up @@ -135,10 +135,6 @@ bool rosidl_typesupport_fastrtps_c_@('__'.join([package_name, *interface_path.pa
return true;
}





static service_type_support_callbacks_t @(service.namespaced_type.name)__callbacks = {
"@('::'.join([package_name] + list(interface_path.parents[0].parts)))",
"@(service.namespaced_type.name)",
Expand All @@ -155,17 +151,6 @@ static rosidl_service_type_support_t @(service.namespaced_type.name)__handle = {
&_@(service.namespaced_type.name)_Event__type_support
};












const rosidl_service_type_support_t *
ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, @(', '.join([package_name] + list(interface_path.parents[0].parts) + [service.namespaced_type.name])))() {
return &@(service.namespaced_type.name)__handle;
Expand Down
29 changes: 13 additions & 16 deletions rosidl_typesupport_fastrtps_cpp/resource/srv__type_support.cpp.em
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
@# Included from rosidl_typesupport_fastrtps_cpp/resource/idl__type_support.cpp.em
@{
from rosidl_pycommon import convert_camel_case_to_lower_case_underscore
from rosidl_parser.definition import SERVICE_REQUEST_MESSAGE_SUFFIX
from rosidl_parser.definition import SERVICE_RESPONSE_MESSAGE_SUFFIX
from rosidl_parser.definition import SERVICE_EVENT_MESSAGE_SUFFIX

include_parts = [package_name] + list(interface_path.parents[0].parts) + [
'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)]
Expand Down Expand Up @@ -56,8 +59,8 @@ namespace typesupport_fastrtps_cpp
static service_type_support_callbacks_t _@(service.namespaced_type.name)__callbacks = {
"@('::'.join([package_name] + list(interface_path.parents[0].parts)))",
"@(service.namespaced_type.name)",
ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, @(', '.join([package_name] + list(interface_path.parents[0].parts))), @(service.namespaced_type.name)_Request)(),
ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, @(', '.join([package_name] + list(interface_path.parents[0].parts))), @(service.namespaced_type.name)_Response)(),
ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, @(', '.join([package_name] + list(interface_path.parents[0].parts))), @(service.namespaced_type.name + SERVICE_REQUEST_MESSAGE_SUFFIX))(),
ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, @(', '.join([package_name] + list(interface_path.parents[0].parts))), @(service.namespaced_type.name + SERVICE_REQUEST_MESSAGE_SUFFIX))(),
};


Expand All @@ -67,23 +70,17 @@ extern "C"
{
#endif

@{event_type = '::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + '_Event'}
@{event_type = '::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_EVENT_MESSAGE_SUFFIX}

void *
rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_introspection_message_create
(
const rosidl_service_introspection_info_t * info,
rcutils_allocator_t * allocator,
void * request_message,
void * response_message,
const void * request_message,
const void * response_message,
bool enable_message_payload)
{

// Use allocator pattern b.c. shared_ptr ref count -> 0
// add allocator arg
// could malloc the class (?) manual construct/destruct


auto * event_msg = static_cast<@event_type *>(allocator->zero_allocate(1, sizeof(@event_type), allocator->state));
if (nullptr == event_msg) {
return NULL;
Expand All @@ -101,9 +98,11 @@ rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.names

if (enable_message_payload) {
if (nullptr == request_message) {
event_msg->response.push_back(*static_cast<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Response *> (response_message));
event_msg->response.push_back(*static_cast<const @('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_RESPONSE_MESSAGE_SUFFIX) *> (response_message));
} else if (nullptr == response_message) {
event_msg->request.push_back(*static_cast<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Request *> (request_message)); } else { // raise an error here
event_msg->request.push_back(*static_cast<const @('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_REQUEST_MESSAGE_SUFFIX)*> (request_message));
} else {
throw std::invalid_argument("request_message and response_message cannot be both non-null");
}
}

Expand All @@ -119,9 +118,7 @@ rcutils_allocator_t * allocator
)
{
auto * event_msg_ = static_cast<@event_type *>(event_msg);
// event_msg_->@('::'.join([package_name, *interface_path.parents[0].parts]) + '::~' + service.namespaced_type.name + '_Event')();
// std::destroy_at(event_msg_); // Why can't I compile with c++17?
event_msg_->~@(service.namespaced_type.name)_Event();
event_msg_->~@(service.namespaced_type.name+SERVICE_EVENT_MESSAGE_SUFFIX)();
allocator->deallocate(event_msg, allocator->state);
return true;
}
Expand Down

0 comments on commit e2f1e57

Please sign in to comment.