Skip to content

Commit 45f1331

Browse files
authored
Add setter and getter for domain_id in rcl_init_options_t (#678)
Signed-off-by: Tomoya.Fujita <[email protected]>
1 parent 3bd0871 commit 45f1331

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
@@ -131,6 +131,25 @@ rcl_init_options_fini(rcl_init_options_t * init_options)
131131
return RCL_RET_OK;
132132
}
133133

134+
rcl_ret_t
135+
rcl_init_options_get_domain_id(rcl_init_options_t * init_options, size_t * domain_id)
136+
{
137+
RCL_CHECK_ARGUMENT_FOR_NULL(init_options, RCL_RET_INVALID_ARGUMENT);
138+
RCL_CHECK_ARGUMENT_FOR_NULL(init_options->impl, RCL_RET_INVALID_ARGUMENT);
139+
RCL_CHECK_ARGUMENT_FOR_NULL(domain_id, RCL_RET_INVALID_ARGUMENT);
140+
*domain_id = init_options->impl->rmw_init_options.domain_id;
141+
return RCL_RET_OK;
142+
}
143+
144+
rcl_ret_t
145+
rcl_init_options_set_domain_id(rcl_init_options_t * init_options, size_t domain_id)
146+
{
147+
RCL_CHECK_ARGUMENT_FOR_NULL(init_options, RCL_RET_INVALID_ARGUMENT);
148+
RCL_CHECK_ARGUMENT_FOR_NULL(init_options->impl, RCL_RET_INVALID_ARGUMENT);
149+
init_options->impl->rmw_init_options.domain_id = domain_id;
150+
return RCL_RET_OK;
151+
}
152+
134153
rmw_init_options_t *
135154
rcl_init_options_get_rmw_init_options(rcl_init_options_t * init_options)
136155
{

rcl/test/rcl/test_init.cpp

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

382+
size_t domain_id;
383+
ret = rcl_init_options_get_domain_id(NULL, &domain_id);
384+
ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
385+
rcl_reset_error();
386+
ret = rcl_init_options_get_domain_id(&init_options, NULL);
387+
ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
388+
rcl_reset_error();
389+
ret = rcl_init_options_get_domain_id(NULL, NULL);
390+
ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
391+
rcl_reset_error();
392+
ret = rcl_init_options_set_domain_id(NULL, domain_id);
393+
ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
394+
rcl_reset_error();
395+
396+
ret = rcl_init_options_get_domain_id(&init_options, &domain_id);
397+
ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
398+
EXPECT_EQ(RCL_DEFAULT_DOMAIN_ID, domain_id);
399+
ret = rcl_init_options_set_domain_id(&init_options, static_cast<size_t>(0u));
400+
ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
401+
ret = rcl_init_options_get_domain_id(&init_options, &domain_id);
402+
ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
403+
EXPECT_EQ(0U, domain_id);
404+
382405
rcl_init_options_t init_options_dst = rcl_get_zero_initialized_init_options();
383-
EXPECT_EQ(RCL_RET_OK, rcl_init_options_copy(&init_options, &init_options_dst));
406+
ASSERT_EQ(RCL_RET_OK, rcl_init_options_copy(&init_options, &init_options_dst));
407+
ret = rcl_init_options_get_domain_id(&init_options_dst, &domain_id);
408+
ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
409+
EXPECT_EQ(0U, domain_id);
384410
EXPECT_EQ(RCL_RET_ALREADY_INIT, rcl_init_options_copy(&init_options, &init_options_dst));
385411
EXPECT_EQ(RCL_RET_OK, rcl_init_options_fini(&init_options_dst));
386412
}

0 commit comments

Comments
 (0)