From e2f1e57e3a41c421b6eecda83f28d578542104a1 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Wed, 24 Aug 2022 01:34:43 -0700 Subject: [PATCH] use const void* for service_introspection_message__create handle fns Signed-off-by: Brian Chen --- .../resource/srv__type_support_c.cpp.em | 19 ++---------- .../resource/srv__type_support.cpp.em | 29 +++++++++---------- 2 files changed, 15 insertions(+), 33 deletions(-) diff --git a/rosidl_typesupport_fastrtps_c/resource/srv__type_support_c.cpp.em b/rosidl_typesupport_fastrtps_c/resource/srv__type_support_c.cpp.em index 1cd049a..0c5cfe5 100644 --- a/rosidl_typesupport_fastrtps_c/resource/srv__type_support_c.cpp.em +++ b/rosidl_typesupport_fastrtps_c/resource/srv__type_support_c.cpp.em @@ -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)); @@ -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)", @@ -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; diff --git a/rosidl_typesupport_fastrtps_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_fastrtps_cpp/resource/srv__type_support.cpp.em index 0cc4410..0909883 100644 --- a/rosidl_typesupport_fastrtps_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_fastrtps_cpp/resource/srv__type_support.cpp.em @@ -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)] @@ -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))(), }; @@ -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; @@ -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 (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 (request_message)); + } else { + throw std::invalid_argument("request_message and response_message cannot be both non-null"); } } @@ -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; }