allocate / deallocate ros message

This commit is contained in:
Dirk Thomas 2014-08-13 12:13:33 -07:00
parent b1bce0aa4e
commit c6d98ecb2a
2 changed files with 20 additions and 1 deletions

View file

@ -25,6 +25,14 @@ public:
SubscriberInterface(const ros_middleware_interface::SubscriberHandle &subscriber_handle, std::string topic_name) SubscriberInterface(const ros_middleware_interface::SubscriberHandle &subscriber_handle, std::string topic_name)
: subscriber_handle_(subscriber_handle), topic_name_(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: private:
ros_middleware_interface::SubscriberHandle subscriber_handle_; ros_middleware_interface::SubscriberHandle subscriber_handle_;
std::string topic_name_; std::string topic_name_;
@ -40,6 +48,16 @@ public:
Subscriber(const ros_middleware_interface::SubscriberHandle &subscriber_handle, std::string topic_name) Subscriber(const ros_middleware_interface::SubscriberHandle &subscriber_handle, std::string topic_name)
: SubscriberInterface(subscriber_handle, 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;
}
}; };
} }

View file

@ -80,12 +80,13 @@ public:
{ {
// Do callback // Do callback
std::cout << "Callback for subscriber of topic: " << subscriber->topic_name_ << std::endl; 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); bool taken = ros_middleware_interface::take(subscriber->subscriber_handle_, ros_msg);
if (taken) if (taken)
{ {
std::cout << "- received message on topic: " << subscriber->topic_name_ << std::endl; std::cout << "- received message on topic: " << subscriber->topic_name_ << std::endl;
} }
subscriber->delete_message(ros_msg);
} }
} }
} }