Skip to content

Commit 825b4e4

Browse files
Unified Node Interfaces: Add const version of get_node_x_interface() (#3006)
Signed-off-by: Fabian Hirmann <f.hirmann@arti-robots.com>
1 parent 41c7f68 commit 825b4e4

2 files changed

Lines changed: 68 additions & 1 deletion

File tree

rclcpp/include/rclcpp/node_interfaces/detail/node_interfaces_helpers.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,12 @@ init_tuple(NodeT & n)
199199
{ \
200200
return StorageClassT::template get<NodeInterfaceType>(); \
201201
} \
202+
\
203+
std::shared_ptr<const NodeInterfaceType> \
204+
get_node_ ## NodeInterfaceName ## _interface() const \
205+
{ \
206+
return StorageClassT::template get<NodeInterfaceType>(); \
207+
} \
202208
}; \
203209
} // namespace rclcpp::node_interfaces::detail
204210
// *INDENT-ON*

rclcpp/test/rclcpp/node_interfaces/test_node_interfaces.cpp

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ TEST_F(TestNodeInterfaces, ni_init) {
192192
/*
193193
Testing macro'ed getters.
194194
*/
195-
TEST_F(TestNodeInterfaces, ni_all_init) {
195+
TEST_F(TestNodeInterfaces, ni_all_init_non_const) {
196196
auto node = std::make_shared<rclcpp::Node>("my_node", "/ns");
197197

198198
using rclcpp::node_interfaces::NodeInterfaces;
@@ -252,3 +252,64 @@ TEST_F(TestNodeInterfaces, ni_all_init) {
252252
time_source = ni.get_node_time_source_interface();
253253
}
254254
}
255+
256+
TEST_F(TestNodeInterfaces, ni_all_init_const) {
257+
auto node = std::make_shared<rclcpp::Node>("my_node", "/ns");
258+
259+
using rclcpp::node_interfaces::NodeInterfaces;
260+
using rclcpp::node_interfaces::NodeBaseInterface;
261+
using rclcpp::node_interfaces::NodeClockInterface;
262+
using rclcpp::node_interfaces::NodeGraphInterface;
263+
using rclcpp::node_interfaces::NodeLoggingInterface;
264+
using rclcpp::node_interfaces::NodeTimersInterface;
265+
using rclcpp::node_interfaces::NodeTopicsInterface;
266+
using rclcpp::node_interfaces::NodeServicesInterface;
267+
using rclcpp::node_interfaces::NodeWaitablesInterface;
268+
using rclcpp::node_interfaces::NodeParametersInterface;
269+
using rclcpp::node_interfaces::NodeTimeSourceInterface;
270+
271+
const auto ni = rclcpp::node_interfaces::NodeInterfaces<ALL_RCLCPP_NODE_INTERFACES>(*node);
272+
273+
{
274+
auto base = ni.get<NodeBaseInterface>();
275+
base = ni.get_node_base_interface();
276+
EXPECT_STREQ(base->get_name(), "my_node"); // Test for functionality
277+
}
278+
{
279+
auto clock = ni.get<NodeClockInterface>();
280+
clock = ni.get_node_clock_interface();
281+
clock->get_clock();
282+
}
283+
{
284+
auto graph = ni.get<NodeGraphInterface>();
285+
graph = ni.get_node_graph_interface();
286+
}
287+
{
288+
auto logging = ni.get<NodeLoggingInterface>();
289+
logging = ni.get_node_logging_interface();
290+
}
291+
{
292+
auto timers = ni.get<NodeTimersInterface>();
293+
timers = ni.get_node_timers_interface();
294+
}
295+
{
296+
auto topics = ni.get<NodeTopicsInterface>();
297+
topics = ni.get_node_topics_interface();
298+
}
299+
{
300+
auto services = ni.get<NodeServicesInterface>();
301+
services = ni.get_node_services_interface();
302+
}
303+
{
304+
auto waitables = ni.get<NodeWaitablesInterface>();
305+
waitables = ni.get_node_waitables_interface();
306+
}
307+
{
308+
auto parameters = ni.get<NodeParametersInterface>();
309+
parameters = ni.get_node_parameters_interface();
310+
}
311+
{
312+
auto time_source = ni.get<NodeTimeSourceInterface>();
313+
time_source = ni.get_node_time_source_interface();
314+
}
315+
}

0 commit comments

Comments
 (0)