Fix get_node_interfaces functions taking a pointer (#821)

Signed-off-by: ivanpauno <ivanpauno@ekumenlabs.com>
This commit is contained in:
ivanpauno 2019-08-21 09:17:25 -03:00 committed by GitHub
parent 65188b021d
commit 4dbc7192d2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 9 deletions

View file

@ -123,16 +123,18 @@ template<
typename std::enable_if<std::is_pointer<NodeType>::value, int>::type = 0 typename std::enable_if<std::is_pointer<NodeType>::value, int>::type = 0
> >
rclcpp::node_interfaces::NodeBaseInterface * rclcpp::node_interfaces::NodeBaseInterface *
get_node_base_interface(NodeType && node_pointer) get_node_base_interface(NodeType node_pointer)
{ {
// Forward pointers to detail implmentation directly. // Forward pointers to detail implmentation directly.
return detail::get_node_base_interface_from_pointer(std::forward<NodeType>(node_pointer)); return detail::get_node_base_interface_from_pointer(node_pointer);
} }
/// Get the NodeBaseInterface as a pointer from a "Node like" object. /// Get the NodeBaseInterface as a pointer from a "Node like" object.
template< template<
typename NodeType, typename NodeType,
typename std::enable_if<!std::is_pointer<NodeType>::value, int>::type = 0 typename std::enable_if<
!std::is_pointer<typename std::remove_reference<NodeType>::type>::value, int
>::type = 0
> >
rclcpp::node_interfaces::NodeBaseInterface * rclcpp::node_interfaces::NodeBaseInterface *
get_node_base_interface(NodeType && node_reference) get_node_base_interface(NodeType && node_reference)

View file

@ -123,16 +123,18 @@ template<
typename std::enable_if<std::is_pointer<NodeType>::value, int>::type = 0 typename std::enable_if<std::is_pointer<NodeType>::value, int>::type = 0
> >
rclcpp::node_interfaces::NodeTimersInterface * rclcpp::node_interfaces::NodeTimersInterface *
get_node_timers_interface(NodeType && node_pointer) get_node_timers_interface(NodeType node_pointer)
{ {
// Forward pointers to detail implmentation directly. // Forward pointers to detail implmentation directly.
return detail::get_node_timers_interface_from_pointer(std::forward<NodeType>(node_pointer)); return detail::get_node_timers_interface_from_pointer(node_pointer);
} }
/// Get the NodeTimersInterface as a pointer from a "Node like" object. /// Get the NodeTimersInterface as a pointer from a "Node like" object.
template< template<
typename NodeType, typename NodeType,
typename std::enable_if<!std::is_pointer<NodeType>::value, int>::type = 0 typename std::enable_if<
!std::is_pointer<typename std::remove_reference<NodeType>::type>::value, int
>::type = 0
> >
rclcpp::node_interfaces::NodeTimersInterface * rclcpp::node_interfaces::NodeTimersInterface *
get_node_timers_interface(NodeType && node_reference) get_node_timers_interface(NodeType && node_reference)

View file

@ -123,16 +123,18 @@ template<
typename std::enable_if<std::is_pointer<NodeType>::value, int>::type = 0 typename std::enable_if<std::is_pointer<NodeType>::value, int>::type = 0
> >
rclcpp::node_interfaces::NodeTopicsInterface * rclcpp::node_interfaces::NodeTopicsInterface *
get_node_topics_interface(NodeType && node_pointer) get_node_topics_interface(NodeType node_pointer)
{ {
// Forward pointers to detail implmentation directly. // Forward pointers to detail implmentation directly.
return detail::get_node_topics_interface_from_pointer(std::forward<NodeType>(node_pointer)); return detail::get_node_topics_interface_from_pointer(node_pointer);
} }
/// Get the NodeTopicsInterface as a pointer from a "Node like" object. /// Get the NodeTopicsInterface as a pointer from a "Node like" object.
template< template<
typename NodeType, typename NodeType,
typename std::enable_if<!std::is_pointer<NodeType>::value, int>::type = 0 typename std::enable_if<
!std::is_pointer<typename std::remove_reference<NodeType>::type>::value, int
>::type = 0
> >
rclcpp::node_interfaces::NodeTopicsInterface * rclcpp::node_interfaces::NodeTopicsInterface *
get_node_topics_interface(NodeType && node_reference) get_node_topics_interface(NodeType && node_reference)

View file

@ -85,6 +85,26 @@ TEST_F(TestGetNodeInterfaces, node_reference) {
>::value, "expected rclcpp::node_interfaces::NodeTopicsInterface *"); >::value, "expected rclcpp::node_interfaces::NodeTopicsInterface *");
} }
TEST_F(TestGetNodeInterfaces, rclcpp_node_pointer) {
rclcpp::Node * node_pointer = this->node.get();
auto result = rclcpp::node_interfaces::get_node_topics_interface(node_pointer);
static_assert(
std::is_same<
rclcpp::node_interfaces::NodeTopicsInterface *,
decltype(result)
>::value, "expected rclcpp::node_interfaces::NodeTopicsInterface *");
}
TEST_F(TestGetNodeInterfaces, node_pointer) {
NodeWrapper * wrapped_node_pointer = this->wrapped_node.get();
auto result = rclcpp::node_interfaces::get_node_topics_interface(wrapped_node_pointer);
static_assert(
std::is_same<
rclcpp::node_interfaces::NodeTopicsInterface *,
decltype(result)
>::value, "expected rclcpp::node_interfaces::NodeTopicsInterface *");
}
TEST_F(TestGetNodeInterfaces, interface_shared_pointer) { TEST_F(TestGetNodeInterfaces, interface_shared_pointer) {
std::shared_ptr<rclcpp::node_interfaces::NodeTopicsInterface> interface_shared_ptr = std::shared_ptr<rclcpp::node_interfaces::NodeTopicsInterface> interface_shared_ptr =
this->node->get_node_topics_interface(); this->node->get_node_topics_interface();