Signed-off-by: Michel Hidalgo <michel@ekumenlabs.com> Signed-off-by: Michel Hidalgo <michel@ekumenlabs.com> Co-authored-by: Michel Hidalgo <michel@ekumenlabs.com>
This commit is contained in:
parent
440b191ae6
commit
6d6b78f28d
2 changed files with 33 additions and 2 deletions
|
@ -127,6 +127,32 @@ align_int_(size_t __align, T __int) noexcept
|
||||||
return (__int - 1u + __align) & ~(__align - 1);
|
return (__int - 1u + __align) & ~(__align - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void resize_field(
|
||||||
|
const rosidl_typesupport_introspection_cpp::MessageMember * member,
|
||||||
|
void * field,
|
||||||
|
size_t size)
|
||||||
|
{
|
||||||
|
if (!member->resize_function) {
|
||||||
|
throw std::runtime_error("unexpected error: resize function is null");
|
||||||
|
}
|
||||||
|
|
||||||
|
member->resize_function(field, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void resize_field(
|
||||||
|
const rosidl_typesupport_introspection_c__MessageMember * member,
|
||||||
|
void * field,
|
||||||
|
size_t size)
|
||||||
|
{
|
||||||
|
if (!member->resize_function) {
|
||||||
|
throw std::runtime_error("unexpected error: resize function is null");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!member->resize_function(field, size)) {
|
||||||
|
throw std::runtime_error("unable to resize field");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static inline T *
|
static inline T *
|
||||||
align_ptr_(size_t __align, T * __ptr) noexcept
|
align_ptr_(size_t __align, T * __ptr) noexcept
|
||||||
|
@ -315,7 +341,7 @@ inline void deserialize_field<std::wstring>(
|
||||||
size = static_cast<uint32_t>(member->array_size_);
|
size = static_cast<uint32_t>(member->array_size_);
|
||||||
} else {
|
} else {
|
||||||
deser >> size;
|
deser >> size;
|
||||||
member->resize_function(field, size);
|
resize_field(member, field, size);
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < size; ++i) {
|
for (size_t i = 0; i < size; ++i) {
|
||||||
void * element = member->get_function(field, i);
|
void * element = member->get_function(field, i);
|
||||||
|
@ -342,7 +368,9 @@ void deserialize_field(
|
||||||
auto & data = *reinterpret_cast<typename GenericCSequence<T>::type *>(field);
|
auto & data = *reinterpret_cast<typename GenericCSequence<T>::type *>(field);
|
||||||
int32_t dsize = 0;
|
int32_t dsize = 0;
|
||||||
deser >> dsize;
|
deser >> dsize;
|
||||||
GenericCSequence<T>::init(&data, dsize);
|
if (!GenericCSequence<T>::init(&data, dsize)) {
|
||||||
|
throw std::runtime_error("unable initialize generic sequence");
|
||||||
|
}
|
||||||
deser.deserializeA(reinterpret_cast<T *>(data.data), dsize);
|
deser.deserializeA(reinterpret_cast<T *>(data.data), dsize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1445,6 +1445,9 @@ extern "C" rmw_ret_t rmw_deserialize(
|
||||||
} catch (rmw_cyclonedds_cpp::Exception & e) {
|
} catch (rmw_cyclonedds_cpp::Exception & e) {
|
||||||
RMW_SET_ERROR_MSG_WITH_FORMAT_STRING("rmw_serialize: %s", e.what());
|
RMW_SET_ERROR_MSG_WITH_FORMAT_STRING("rmw_serialize: %s", e.what());
|
||||||
ok = false;
|
ok = false;
|
||||||
|
} catch (std::runtime_error & e) {
|
||||||
|
RMW_SET_ERROR_MSG_WITH_FORMAT_STRING("rmw_serialize: %s", e.what());
|
||||||
|
ok = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ok ? RMW_RET_OK : RMW_RET_ERROR;
|
return ok ? RMW_RET_OK : RMW_RET_ERROR;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue