Skip to content

Commit eb49444

Browse files
authored
Add get_parameter_or overload returning value or alternative (#2973)
Signed-off-by: Zheng Qu <[email protected]>
1 parent 4d14414 commit eb49444

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

rclcpp_lifecycle/include/rclcpp_lifecycle/lifecycle_node.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,16 @@ class LifecycleNode : public node_interfaces::LifecycleNodeInterface,
486486
ParameterT & value,
487487
const ParameterT & alternative_value) const;
488488

489+
/// Return the parameter value, or the "alternative_value" if not set.
490+
/**
491+
* \sa rclcpp::Node::get_parameter_or
492+
*/
493+
template<typename ParameterT>
494+
ParameterT
495+
get_parameter_or(
496+
const std::string & name,
497+
const ParameterT & alternative_value) const;
498+
489499
/// Return the parameters by the given parameter names.
490500
/**
491501
* \sa rclcpp::Node::get_parameters

rclcpp_lifecycle/include/rclcpp_lifecycle/lifecycle_node_impl.hpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,5 +306,16 @@ LifecycleNode::get_parameter_or(
306306
return got_parameter;
307307
}
308308

309+
template<typename ParameterT>
310+
ParameterT
311+
LifecycleNode::get_parameter_or(
312+
const std::string & name,
313+
const ParameterT & alternative_value) const
314+
{
315+
ParameterT parameter;
316+
get_parameter_or(name, parameter, alternative_value);
317+
return parameter;
318+
}
319+
309320
} // namespace rclcpp_lifecycle
310321
#endif // RCLCPP_LIFECYCLE__LIFECYCLE_NODE_IMPL_HPP_

rclcpp_lifecycle/test/test_lifecycle_node.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -840,6 +840,26 @@ TEST_F(TestDefaultStateMachine, check_parameters) {
840840
EXPECT_TRUE(parameter.as_bool());
841841
}
842842

843+
TEST_F(TestDefaultStateMachine, test_get_parameter_or) {
844+
auto test_node = std::make_shared<EmptyLifecycleNode>("testnode");
845+
846+
const std::string param_name = "test_param";
847+
int param_int = -999;
848+
849+
// Parameter does not exist, should return "or" value
850+
EXPECT_FALSE(test_node->get_parameter_or(param_name, param_int, 123));
851+
EXPECT_EQ(param_int, 123);
852+
EXPECT_EQ(test_node->get_parameter_or(param_name, 456), 456);
853+
854+
// Declare param_int
855+
test_node->declare_parameter(param_name, rclcpp::ParameterValue(789));
856+
857+
// Parameter exists, should return existing value
858+
EXPECT_TRUE(test_node->get_parameter_or(param_name, param_int, 123));
859+
EXPECT_EQ(param_int, 789);
860+
EXPECT_EQ(test_node->get_parameter_or(param_name, 456), 789);
861+
}
862+
843863
TEST_F(TestDefaultStateMachine, test_getters) {
844864
auto test_node = std::make_shared<EmptyLifecycleNode>("testnode");
845865
auto options = test_node->get_node_options();

0 commit comments

Comments
 (0)