Skip to content

Commit

Permalink
use uint8_t instead of char for serialized message (#161)
Browse files Browse the repository at this point in the history
* use uint8_t instead of char for serialized message

* fix typo

* fix windows waning
  • Loading branch information
Karsten1987 authored Nov 26, 2018
1 parent 432277c commit 146052a
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 15 deletions.
16 changes: 8 additions & 8 deletions rmw/include/rmw/serialized_message.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,19 @@ extern "C"
{
#endif

#include "rcutils/types/char_array.h"
#include "rcutils/types/uint8_array.h"

// aliases for rcutils_char_array_t
// aliases for rcutils_uint8_array_t
/*
* For now this is a simple aliasing from a serialized message to a char array.
* For now this is a simple aliasing from a serialized message to a uint8 array.
* However, in future developments this serialized message can become something
* more complex and is therefore aliased.
*/
typedef rcutils_char_array_t rmw_serialized_message_t;
#define rmw_get_zero_initialized_serialized_message rcutils_get_zero_initialized_char_array
#define rmw_serialized_message_init rcutils_char_array_init
#define rmw_serialized_message_fini rcutils_char_array_fini
#define rmw_serialized_message_resize rcutils_char_array_resize
typedef rcutils_uint8_array_t rmw_serialized_message_t;
#define rmw_get_zero_initialized_serialized_message rcutils_get_zero_initialized_uint8_array
#define rmw_serialized_message_init rcutils_uint8_array_init
#define rmw_serialized_message_fini rcutils_uint8_array_fini
#define rmw_serialized_message_resize rcutils_uint8_array_resize

#if __cplusplus
}
Expand Down
24 changes: 17 additions & 7 deletions rmw/test/test_serialized_message.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,26 +35,36 @@ TEST(test_serialized_message, resize) {
auto ret = rmw_serialized_message_init(&serialized_msg, 5, &allocator);
ASSERT_EQ(RMW_RET_OK, ret);

memcpy(serialized_msg.buffer, "1234\0", 5);
for (size_t i = 0; i < 5; ++i) {
uint8_t c = 1u << i;
memcpy(serialized_msg.buffer + i, &c, 1);
}
serialized_msg.buffer_length = 5;
EXPECT_STREQ("1234\0", serialized_msg.buffer);
for (size_t i = 0; i < serialized_msg.buffer_length; ++i) {
EXPECT_EQ(1u << i, serialized_msg.buffer[i]);
}

ret = rmw_serialized_message_resize(&serialized_msg, 11);
ASSERT_EQ(RMW_RET_OK, ret);
EXPECT_EQ(11u, serialized_msg.buffer_capacity);
EXPECT_EQ(5u, serialized_msg.buffer_length);

memcpy(serialized_msg.buffer, "0987654321\0", 11);
for (size_t i = 0; i < 11; ++i) {
uint8_t c = 0xFF - static_cast<uint8_t>(i);
memcpy(serialized_msg.buffer + i, &c, 1);
}
serialized_msg.buffer_length = 11;
EXPECT_STREQ("0987654321\0", serialized_msg.buffer);
for (size_t i = 0; i < 11; ++i) {
EXPECT_EQ(0xFF - i, serialized_msg.buffer[i]);
}

ret = rmw_serialized_message_resize(&serialized_msg, 3);
ASSERT_EQ(RMW_RET_OK, ret);
EXPECT_EQ(3u, serialized_msg.buffer_capacity);
EXPECT_EQ(3u, serialized_msg.buffer_length);
EXPECT_EQ('0', serialized_msg.buffer[0]);
EXPECT_EQ('9', serialized_msg.buffer[1]);
EXPECT_EQ('8', serialized_msg.buffer[2]);
EXPECT_EQ(0xFF, serialized_msg.buffer[0]);
EXPECT_EQ(0xFF - 1, serialized_msg.buffer[1]);
EXPECT_EQ(0xFF - 2, serialized_msg.buffer[2]);
// the other fields are garbage.

// cleanup only 3 fields
Expand Down

0 comments on commit 146052a

Please sign in to comment.