From 6dd3bf09757fdb237ea0098bb882ffcde2f0653a Mon Sep 17 00:00:00 2001 From: "Tomoya.Fujita" Date: Wed, 1 Jul 2020 15:51:11 +0900 Subject: [PATCH] add rcl_subscription_is_cft_supported. Signed-off-by: Tomoya.Fujita --- rcl/include/rcl/subscription.h | 9 +++++++++ rcl/src/rcl/subscription.c | 9 +++++++++ rcl/test/rcl/test_subscription.cpp | 4 ++++ 3 files changed, 22 insertions(+) diff --git a/rcl/include/rcl/subscription.h b/rcl/include/rcl/subscription.h index ccaea82cf..05e4f31b1 100644 --- a/rcl/include/rcl/subscription.h +++ b/rcl/include/rcl/subscription.h @@ -603,6 +603,15 @@ RCL_PUBLIC bool rcl_subscription_can_loan_messages(const rcl_subscription_t * subscription); +/// Check if subscription instance support ContentFilteredTopic. +/** + * Depending on the middleware. + * this will return true if the middleware can support ContentFilteredTopic. + */ +RCL_PUBLIC +bool +rcl_subscription_is_cft_supported(const rcl_subscription_t * subscription); + #ifdef __cplusplus } #endif diff --git a/rcl/src/rcl/subscription.c b/rcl/src/rcl/subscription.c index 2e3b37d38..62c2d2631 100644 --- a/rcl/src/rcl/subscription.c +++ b/rcl/src/rcl/subscription.c @@ -494,6 +494,15 @@ rcl_subscription_can_loan_messages(const rcl_subscription_t * subscription) return subscription->impl->rmw_handle->can_loan_messages; } +bool +rcl_subscription_is_cft_supported(const rcl_subscription_t * subscription) +{ + if (!rcl_subscription_is_valid(subscription)) { + return false; // error message already set + } + return subscription->impl->rmw_handle->is_cft_supported; +} + #ifdef __cplusplus } #endif diff --git a/rcl/test/rcl/test_subscription.cpp b/rcl/test/rcl/test_subscription.cpp index 2dcbd4490..3bd916f6f 100644 --- a/rcl/test/rcl/test_subscription.cpp +++ b/rcl/test/rcl/test_subscription.cpp @@ -727,6 +727,8 @@ TEST_F(CLASSNAME(TestSubscriptionFixtureInit, RMW_IMPLEMENTATION), test_subscrip rcl_reset_error(); EXPECT_FALSE(rcl_subscription_can_loan_messages(nullptr)); rcl_reset_error(); + EXPECT_FALSE(rcl_subscription_is_cft_supported(nullptr)); + rcl_reset_error(); EXPECT_EQ(NULL, rcl_subscription_get_rmw_handle(nullptr)); rcl_reset_error(); EXPECT_EQ(NULL, rcl_subscription_get_topic_name(nullptr)); @@ -742,6 +744,8 @@ TEST_F(CLASSNAME(TestSubscriptionFixtureInit, RMW_IMPLEMENTATION), test_subscrip rcl_reset_error(); EXPECT_FALSE(rcl_subscription_can_loan_messages(&subscription_zero_init)); rcl_reset_error(); + EXPECT_FALSE(rcl_subscription_is_cft_supported(&subscription_zero_init)); + rcl_reset_error(); EXPECT_EQ(NULL, rcl_subscription_get_rmw_handle(&subscription_zero_init)); rcl_reset_error(); EXPECT_EQ(NULL, rcl_subscription_get_topic_name(&subscription_zero_init));