Skip to content

Commit

Permalink
Refs #2959. Fixing estimation of serialized size.
Browse files Browse the repository at this point in the history
  • Loading branch information
MiguelCompany committed Jun 17, 2018
1 parent ebaa19d commit d8452f8
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ MessageTypeSupport<MembersType>::MessageTypeSupport(const MembersType * members)
// Encapsulation size
this->m_typeSize = 4;
if (this->members_->member_count_ != 0) {
this->m_typeSize += static_cast<uint32_t>(this->calculateMaxSerializedSize(members, 0));
this->m_typeSize += static_cast<uint32_t>(this->calculateMaxSerializedSize(members, 4));
} else {
this->m_typeSize += 4;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ RequestTypeSupport<ServiceMembersType, MessageMembersType>::RequestTypeSupport(
// Encapsulation size
this->m_typeSize = 4;
if (this->members_->member_count_ != 0) {
this->m_typeSize += static_cast<uint32_t>(this->calculateMaxSerializedSize(this->members_, 0));
this->m_typeSize += static_cast<uint32_t>(this->calculateMaxSerializedSize(this->members_, 4));
} else {
this->m_typeSize += 4;
}
}

Expand All @@ -67,7 +69,9 @@ ResponseTypeSupport<ServiceMembersType, MessageMembersType>::ResponseTypeSupport
// Encapsulation size
this->m_typeSize = 4;
if (this->members_->member_count_ != 0) {
this->m_typeSize += static_cast<uint32_t>(this->calculateMaxSerializedSize(this->members_, 0));
this->m_typeSize += static_cast<uint32_t>(this->calculateMaxSerializedSize(this->members_, 4));
} else {
this->m_typeSize += 4;
}
}

Expand Down
12 changes: 7 additions & 5 deletions rmw_fastrtps_cpp/include/rmw_fastrtps_cpp/TypeSupport_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -253,20 +253,20 @@ size_t get_next_field_align<std::string>(
auto str = *static_cast<std::string *>(field);
current_alignment += padding +
eprosima::fastcdr::Cdr::alignment(current_alignment, padding) +
str.length() + 1;
str.size() + 1;
} else if (member->array_size_ && !member->is_upper_bound_) {
auto str_arr = static_cast<std::string *>(field);
for (size_t index = 0; index < member->array_size_; ++index) {
current_alignment += padding +
eprosima::fastcdr::Cdr::alignment(current_alignment, padding) +
str_arr[index].length() + 1;
str_arr[index].size() + 1;
}
} else {
std::vector<std::string> & data = *reinterpret_cast<std::vector<std::string> *>(field);
for (size_t index = 0; index < data.size(); ++index) {
current_alignment += padding +
for (auto it : data) {
current_alignment += padding + padding +
eprosima::fastcdr::Cdr::alignment(current_alignment, padding) +
data[index].length() + 1;
it.size() + 1;
}
}
return current_alignment;
Expand Down Expand Up @@ -756,6 +756,7 @@ size_t TypeSupport<MembersType>::calculateMaxSerializedSize(

// Encapsulation
const size_t padding = 4;
current_alignment += padding + eprosima::fastcdr::Cdr::alignment(current_alignment, padding);

for (uint32_t i = 0; i < members->member_count_; ++i) {
const auto * member = members->members_ + i;
Expand Down Expand Up @@ -834,6 +835,7 @@ size_t TypeSupport<MembersType>::getSerializedDataLength(

// Encapsulation
const size_t padding = 4;
current_alignment += padding + eprosima::fastcdr::Cdr::alignment(current_alignment, padding);

for (uint32_t i = 0; i < members->member_count_; ++i) {
const auto * member = members->members_ + i;
Expand Down

0 comments on commit d8452f8

Please sign in to comment.