Skip to content

Commit e88a953

Browse files
Add setter and getter for domain_id in rcl_init_options_t (#678) (#946)
Signed-off-by: Tomoya.Fujita <[email protected]> (cherry picked from commit 45f1331) Co-authored-by: tomoya <[email protected]>
1 parent f91a556 commit e88a953

File tree

3 files changed

+90
-1
lines changed

3 files changed

+90
-1
lines changed

rcl/include/rcl/init_options.h

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,50 @@ RCL_WARN_UNUSED
127127
rcl_ret_t
128128
rcl_init_options_fini(rcl_init_options_t * init_options);
129129

130+
/// Return the domain_id stored in the init options.
131+
/**
132+
* Get the domain id from the specified rcl_init_options_t object.
133+
*
134+
* <hr>
135+
* Attribute | Adherence
136+
* ------------------ | -------------
137+
* Allocates Memory | No
138+
* Thread-Safe | Yes
139+
* Uses Atomics | No
140+
* Lock-Free | Yes
141+
*
142+
* \param[in] init_options object from which the domain id should be retrieved.
143+
* \param[out] domain_id domain id to be set in init_options object.
144+
* \return `RCL_RET_OK` if successful, or
145+
* \return `RCL_RET_INVALID_ARGUMENT` if any arguments are invalid.
146+
*/
147+
RCL_PUBLIC
148+
RCL_WARN_UNUSED
149+
rcl_ret_t
150+
rcl_init_options_get_domain_id(rcl_init_options_t * init_options, size_t * domain_id);
151+
152+
/// Set a domain id in the init options provided.
153+
/**
154+
* Store the domain id in the specified init_options object.
155+
*
156+
* <hr>
157+
* Attribute | Adherence
158+
* ------------------ | -------------
159+
* Allocates Memory | No
160+
* Thread-Safe | Yes
161+
* Uses Atomics | No
162+
* Lock-Free | Yes
163+
*
164+
* \param[in] init_options objects in which to set the specified domain id.
165+
* \param[in] domain_id domain id to be set in init_options object.
166+
* \return `RCL_RET_OK` if successful, or
167+
* \return `RCL_RET_INVALID_ARGUMENT` if any arguments are invalid.
168+
*/
169+
RCL_PUBLIC
170+
RCL_WARN_UNUSED
171+
rcl_ret_t
172+
rcl_init_options_set_domain_id(rcl_init_options_t * init_options, size_t domain_id);
173+
130174
/// Return the rmw init options which are stored internally.
131175
/**
132176
* This function can fail and return `NULL` if:

rcl/src/rcl/init_options.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,25 @@ rcl_init_options_fini(rcl_init_options_t * init_options)
142142
return RCL_RET_OK;
143143
}
144144

145+
rcl_ret_t
146+
rcl_init_options_get_domain_id(rcl_init_options_t * init_options, size_t * domain_id)
147+
{
148+
RCL_CHECK_ARGUMENT_FOR_NULL(init_options, RCL_RET_INVALID_ARGUMENT);
149+
RCL_CHECK_ARGUMENT_FOR_NULL(init_options->impl, RCL_RET_INVALID_ARGUMENT);
150+
RCL_CHECK_ARGUMENT_FOR_NULL(domain_id, RCL_RET_INVALID_ARGUMENT);
151+
*domain_id = init_options->impl->rmw_init_options.domain_id;
152+
return RCL_RET_OK;
153+
}
154+
155+
rcl_ret_t
156+
rcl_init_options_set_domain_id(rcl_init_options_t * init_options, size_t domain_id)
157+
{
158+
RCL_CHECK_ARGUMENT_FOR_NULL(init_options, RCL_RET_INVALID_ARGUMENT);
159+
RCL_CHECK_ARGUMENT_FOR_NULL(init_options->impl, RCL_RET_INVALID_ARGUMENT);
160+
init_options->impl->rmw_init_options.domain_id = domain_id;
161+
return RCL_RET_OK;
162+
}
163+
145164
rmw_init_options_t *
146165
rcl_init_options_get_rmw_init_options(rcl_init_options_t * init_options)
147166
{

rcl/test/rcl/test_init.cpp

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,8 +453,34 @@ TEST_F(CLASSNAME(TestRCLFixture, RMW_IMPLEMENTATION), test_rcl_init_options_acce
453453
const rcl_allocator_t * options_allocator = rcl_init_options_get_allocator(&init_options);
454454
EXPECT_TRUE(rcutils_allocator_is_valid(options_allocator));
455455

456+
size_t domain_id;
457+
ret = rcl_init_options_get_domain_id(NULL, &domain_id);
458+
ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
459+
rcl_reset_error();
460+
ret = rcl_init_options_get_domain_id(&init_options, NULL);
461+
ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
462+
rcl_reset_error();
463+
ret = rcl_init_options_get_domain_id(NULL, NULL);
464+
ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
465+
rcl_reset_error();
466+
ret = rcl_init_options_set_domain_id(NULL, domain_id);
467+
ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
468+
rcl_reset_error();
469+
470+
ret = rcl_init_options_get_domain_id(&init_options, &domain_id);
471+
ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
472+
EXPECT_EQ(RCL_DEFAULT_DOMAIN_ID, domain_id);
473+
ret = rcl_init_options_set_domain_id(&init_options, static_cast<size_t>(0u));
474+
ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
475+
ret = rcl_init_options_get_domain_id(&init_options, &domain_id);
476+
ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
477+
EXPECT_EQ(0U, domain_id);
478+
456479
rcl_init_options_t init_options_dst = rcl_get_zero_initialized_init_options();
457-
EXPECT_EQ(RCL_RET_OK, rcl_init_options_copy(&init_options, &init_options_dst));
480+
ASSERT_EQ(RCL_RET_OK, rcl_init_options_copy(&init_options, &init_options_dst));
481+
ret = rcl_init_options_get_domain_id(&init_options_dst, &domain_id);
482+
ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
483+
EXPECT_EQ(0U, domain_id);
458484
EXPECT_EQ(RCL_RET_ALREADY_INIT, rcl_init_options_copy(&init_options, &init_options_dst));
459485
EXPECT_EQ(RCL_RET_OK, rcl_init_options_fini(&init_options_dst));
460486
}

0 commit comments

Comments
 (0)