From c6d98ecb2a497db8699ea1f2e40eab98048d0566 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Wed, 13 Aug 2014 12:13:33 -0700 Subject: [PATCH] allocate / deallocate ros message --- rclcpp/include/rclcpp/Subscriber.h | 18 ++++++++++++++++++ .../rclcpp/executor/SingleThreadExecutor.h | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/rclcpp/include/rclcpp/Subscriber.h b/rclcpp/include/rclcpp/Subscriber.h index 4f05d5a..e5c628b 100644 --- a/rclcpp/include/rclcpp/Subscriber.h +++ b/rclcpp/include/rclcpp/Subscriber.h @@ -25,6 +25,14 @@ public: SubscriberInterface(const ros_middleware_interface::SubscriberHandle &subscriber_handle, std::string topic_name) : subscriber_handle_(subscriber_handle), topic_name_(topic_name) {} + virtual void * create_message() + { + throw std::runtime_error("not implemented - should always use override from subclass"); + } + virtual void delete_message(void * ros_message) + { + throw std::runtime_error("not implemented - should always use override from subclass"); + } private: ros_middleware_interface::SubscriberHandle subscriber_handle_; std::string topic_name_; @@ -40,6 +48,16 @@ public: Subscriber(const ros_middleware_interface::SubscriberHandle &subscriber_handle, std::string topic_name) : SubscriberInterface(subscriber_handle, topic_name) {} + void * create_message() + { + return new ROSMessage(); + } + void delete_message(void * ros_message) + { + ROSMessage* msg = (ROSMessage*)ros_message; + delete msg; + ros_message = 0; + } }; } diff --git a/rclcpp/include/rclcpp/executor/SingleThreadExecutor.h b/rclcpp/include/rclcpp/executor/SingleThreadExecutor.h index 17c429e..1857ecf 100644 --- a/rclcpp/include/rclcpp/executor/SingleThreadExecutor.h +++ b/rclcpp/include/rclcpp/executor/SingleThreadExecutor.h @@ -80,12 +80,13 @@ public: { // Do callback std::cout << "Callback for subscriber of topic: " << subscriber->topic_name_ << std::endl; - void * ros_msg = 0; + void * ros_msg = subscriber->create_message(); bool taken = ros_middleware_interface::take(subscriber->subscriber_handle_, ros_msg); if (taken) { std::cout << "- received message on topic: " << subscriber->topic_name_ << std::endl; } + subscriber->delete_message(ros_msg); } } }