Skip to content

Commit 257ed01

Browse files
committed
Store allocator inside sequence structure
Signed-off-by: Michael Carroll <[email protected]>
1 parent fc52e69 commit 257ed01

File tree

3 files changed

+35
-38
lines changed

3 files changed

+35
-38
lines changed

rmw/include/rmw/message_sequence.h

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ typedef struct RMW_PUBLIC_TYPE rmw_message_sequence_t
3535
size_t size;
3636
/// The total allocated capacity of the data array.
3737
size_t capacity;
38+
/// The allocator used to allocate the data array.
39+
rcutils_allocator_t * allocator;
3840
} rmw_message_sequence_t;
3941

4042
/// Structure to hold a sequence of message infos.
@@ -46,6 +48,8 @@ typedef struct RMW_PUBLIC_TYPE rmw_message_info_sequence_t
4648
size_t size;
4749
/// The total allocated capacity of the data array.
4850
size_t capacity;
51+
/// The allocator used to allocate the data array.
52+
rcutils_allocator_t * allocator;
4953
} rmw_message_info_sequence_t;
5054

5155
/// Return an rmw_message_sequence_t struct with members initialized to `NULL`;
@@ -64,7 +68,7 @@ rmw_ret_t
6468
rmw_message_sequence_init(
6569
rmw_message_sequence_t * sequence,
6670
size_t size,
67-
const rcutils_allocator_t * allocator);
71+
rcutils_allocator_t * allocator);
6872

6973
/// Finalize an rmw_message_sequence_t object.
7074
/**
@@ -76,13 +80,10 @@ rmw_message_sequence_init(
7680
* Note: This will not call `fini` or deallocate the underlying message structures.
7781
*
7882
* \param[inout] sequence sequence object to be finalized.
79-
* \param[in] allocator the allocator used to allocate memory to the object.
8083
*/
8184
RMW_PUBLIC
8285
rmw_ret_t
83-
rmw_message_sequence_fini(
84-
rmw_message_sequence_t * sequence,
85-
const rcutils_allocator_t * allocator);
86+
rmw_message_sequence_fini(rmw_message_sequence_t * sequence);
8687

8788
RMW_PUBLIC
8889
rmw_message_info_sequence_t
@@ -93,13 +94,11 @@ rmw_ret_t
9394
rmw_message_info_sequence_init(
9495
rmw_message_info_sequence_t * sequence,
9596
size_t size,
96-
const rcutils_allocator_t * allocator);
97+
rcutils_allocator_t * allocator);
9798

9899
RMW_PUBLIC
99100
rmw_ret_t
100-
rmw_message_info_sequence_fini(
101-
rmw_message_info_sequence_t * sequence,
102-
const rcutils_allocator_t * allocator);
101+
rmw_message_info_sequence_fini(rmw_message_info_sequence_t * sequence);
103102

104103
#if __cplusplus
105104
}

rmw/src/message_sequence.c

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ rmw_ret_t
3131
rmw_message_sequence_init(
3232
rmw_message_sequence_t * sequence,
3333
size_t size,
34-
const rcutils_allocator_t * allocator)
34+
rcutils_allocator_t * allocator)
3535
{
3636
RCUTILS_CHECK_ARGUMENT_FOR_NULL(sequence, RMW_RET_INVALID_ARGUMENT);
3737
RCUTILS_CHECK_ALLOCATOR(allocator, return RMW_RET_INVALID_ARGUMENT);
@@ -47,29 +47,27 @@ rmw_message_sequence_init(
4747
sequence->data = data;
4848
sequence->size = 0;
4949
sequence->capacity = size;
50+
sequence->allocator = allocator;
5051

5152
return RMW_RET_OK;
5253
}
5354

5455
rmw_ret_t
55-
rmw_message_sequence_fini(
56-
rmw_message_sequence_t * sequence,
57-
const rcutils_allocator_t * allocator)
56+
rmw_message_sequence_fini(rmw_message_sequence_t * sequence)
5857
{
5958
RCUTILS_CHECK_ARGUMENT_FOR_NULL(sequence, RMW_RET_INVALID_ARGUMENT);
60-
RCUTILS_CHECK_ALLOCATOR(allocator, return RMW_RET_INVALID_ARGUMENT);
6159

6260
if (sequence->data) {
6361
assert(sequence->capacity > 0);
64-
allocator->deallocate(sequence->data, allocator->state);
65-
sequence->data = NULL;
66-
sequence->size = 0u;
67-
sequence->capacity = 0u;
68-
} else {
69-
assert(0 == sequence->size);
70-
assert(0 == sequence->capacity);
62+
RCUTILS_CHECK_ALLOCATOR(sequence->allocator, return RMW_RET_INVALID_ARGUMENT);
63+
sequence->allocator->deallocate(sequence->data, sequence->allocator->state);
7164
}
7265

66+
sequence->data = NULL;
67+
sequence->size = 0u;
68+
sequence->capacity = 0u;
69+
sequence->allocator = NULL;
70+
7371
return RMW_RET_OK;
7472
}
7573

@@ -79,7 +77,8 @@ rmw_get_zero_initialized_message_info_sequence(void)
7977
static rmw_message_info_sequence_t message_info_sequence = {
8078
.data = NULL,
8179
.size = 0u,
82-
.capacity = 0u
80+
.capacity = 0u,
81+
.allocator = NULL
8382
};
8483

8584
return message_info_sequence;
@@ -89,7 +88,7 @@ rmw_ret_t
8988
rmw_message_info_sequence_init(
9089
rmw_message_info_sequence_t * sequence,
9190
size_t size,
92-
const rcutils_allocator_t * allocator)
91+
rcutils_allocator_t * allocator)
9392
{
9493
RCUTILS_CHECK_ARGUMENT_FOR_NULL(sequence, RMW_RET_INVALID_ARGUMENT);
9594
RCUTILS_CHECK_ALLOCATOR(allocator, return RMW_RET_INVALID_ARGUMENT);
@@ -104,27 +103,26 @@ rmw_message_info_sequence_init(
104103
sequence->data = data;
105104
sequence->size = 0u;
106105
sequence->capacity = size;
106+
sequence->allocator = allocator;
107+
107108
return RMW_RET_OK;
108109
}
109110

110111
rmw_ret_t
111-
rmw_message_info_sequence_fini(
112-
rmw_message_info_sequence_t * sequence,
113-
const rcutils_allocator_t * allocator)
112+
rmw_message_info_sequence_fini(rmw_message_info_sequence_t * sequence)
114113
{
115114
RCUTILS_CHECK_ARGUMENT_FOR_NULL(sequence, RMW_RET_INVALID_ARGUMENT);
116-
RCUTILS_CHECK_ALLOCATOR(allocator, return RMW_RET_INVALID_ARGUMENT);
117115

118116
if (sequence->data) {
119117
assert(sequence->capacity > 0);
120-
allocator->deallocate(sequence->data, allocator->state);
121-
sequence->data = NULL;
122-
sequence->size = 0u;
123-
sequence->capacity = 0u;
124-
} else {
125-
assert(0 == sequence->size);
126-
assert(0 == sequence->capacity);
118+
RCUTILS_CHECK_ALLOCATOR(sequence->allocator, return RMW_RET_INVALID_ARGUMENT);
119+
sequence->allocator->deallocate(sequence->data, sequence->allocator->state);
127120
}
128121

122+
sequence->data = NULL;
123+
sequence->size = 0u;
124+
sequence->capacity = 0u;
125+
sequence->allocator = NULL;
126+
129127
return RMW_RET_OK;
130128
}

rmw/test/test_message_sequence.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ TEST(test_message_info_sequence, default_initialization) {
2828
EXPECT_EQ(0u, info_sequence.capacity);
2929
EXPECT_EQ(nullptr, info_sequence.data);
3030

31-
EXPECT_EQ(RMW_RET_OK, rmw_message_info_sequence_fini(&info_sequence, &allocator));
31+
EXPECT_EQ(RMW_RET_OK, rmw_message_info_sequence_fini(&info_sequence));
3232
EXPECT_EQ(0u, info_sequence.size);
3333
EXPECT_EQ(0u, info_sequence.capacity);
3434
EXPECT_EQ(nullptr, info_sequence.data);
@@ -43,7 +43,7 @@ TEST(test_message_info_sequence, initialization_with_size) {
4343
EXPECT_EQ(5u, info_sequence.capacity);
4444
EXPECT_NE(nullptr, info_sequence.data);
4545

46-
EXPECT_EQ(RMW_RET_OK, rmw_message_info_sequence_fini(&info_sequence, &allocator));
46+
EXPECT_EQ(RMW_RET_OK, rmw_message_info_sequence_fini(&info_sequence));
4747
EXPECT_EQ(0u, info_sequence.size);
4848
EXPECT_EQ(0u, info_sequence.capacity);
4949
EXPECT_EQ(nullptr, info_sequence.data);
@@ -59,7 +59,7 @@ TEST(test_message_sequence, default_initialization) {
5959
EXPECT_EQ(0u, message_sequence.capacity);
6060
EXPECT_EQ(nullptr, message_sequence.data);
6161

62-
EXPECT_EQ(RMW_RET_OK, rmw_message_sequence_fini(&message_sequence, &allocator));
62+
EXPECT_EQ(RMW_RET_OK, rmw_message_sequence_fini(&message_sequence));
6363
EXPECT_EQ(0u, message_sequence.size);
6464
EXPECT_EQ(0u, message_sequence.capacity);
6565
EXPECT_EQ(nullptr, message_sequence.data);
@@ -74,7 +74,7 @@ TEST(test_message_sequence, initialization_with_size) {
7474
EXPECT_EQ(5u, message_sequence.capacity);
7575
EXPECT_NE(nullptr, message_sequence.data);
7676

77-
EXPECT_EQ(RMW_RET_OK, rmw_message_sequence_fini(&message_sequence, &allocator));
77+
EXPECT_EQ(RMW_RET_OK, rmw_message_sequence_fini(&message_sequence));
7878
EXPECT_EQ(0u, message_sequence.size);
7979
EXPECT_EQ(0u, message_sequence.capacity);
8080
EXPECT_EQ(nullptr, message_sequence.data);

0 commit comments

Comments
 (0)