Skip to content

Commit

Permalink
Refs #20160: Fixes for TypeInformation serializer
Browse files Browse the repository at this point in the history
Signed-off-by: adriancampo <adriancampo@eprosima.com>
  • Loading branch information
adriancampo committed Feb 1, 2024
1 parent 19f0fc6 commit 918454a
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 43 deletions.
20 changes: 6 additions & 14 deletions src/cpp/fastdds/core/policy/QosPoliciesSerializer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1045,7 +1045,7 @@ template<>
inline uint32_t QosPoliciesSerializer<xtypes::TypeInformationParameter>::cdr_serialized_size(
const xtypes::TypeInformationParameter& qos_policy)
{
eprosima::fastcdr::CdrSizeCalculator calculator(eprosima::fastcdr::CdrVersion::XCDRv1);
eprosima::fastcdr::CdrSizeCalculator calculator(eprosima::fastcdr::CdrVersion::XCDRv2);
size_t current_alignment {0};
size_t size = calculator.calculate_serialized_size(qos_policy.type_information, current_alignment) + 4;
return 2 + 2 + static_cast<uint32_t>(size);
Expand All @@ -1056,7 +1056,7 @@ inline bool QosPoliciesSerializer<xtypes::TypeInformationParameter>::add_to_cdr_
const xtypes::TypeInformationParameter& qos_policy,
fastrtps::rtps::CDRMessage_t* cdr_message)
{
eprosima::fastcdr::CdrSizeCalculator calculator(eprosima::fastcdr::CdrVersion::XCDRv1);
eprosima::fastcdr::CdrSizeCalculator calculator(eprosima::fastcdr::CdrVersion::XCDRv2);
size_t current_alignment {0};
size_t size =
calculator.calculate_serialized_size(qos_policy.type_information,
Expand All @@ -1065,10 +1065,10 @@ inline bool QosPoliciesSerializer<xtypes::TypeInformationParameter>::add_to_cdr_
eprosima::fastcdr::FastBuffer fastbuffer((char*) payload.data, payload.max_size);

eprosima::fastcdr::Cdr ser(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN,
eprosima::fastcdr::CdrVersion::XCDRv1); // Object that serializes the data.
eprosima::fastcdr::CdrVersion::XCDRv2); // Object that serializes the data.
payload.encapsulation = ser.endianness() == eprosima::fastcdr::Cdr::BIG_ENDIANNESS ? CDR_BE : CDR_LE;

ser.serialize_encapsulation();
ser.set_encoding_flag(eprosima::fastcdr::EncodingAlgorithmFlag::PL_CDR);

ser << qos_policy.type_information;
#if FASTCDR_VERSION_MAJOR == 1
Expand Down Expand Up @@ -1102,18 +1102,10 @@ inline bool QosPoliciesSerializer<xtypes::TypeInformationParameter>::read_conten

fastrtps::rtps::CDRMessage::readData(cdr_message, payload.data, parameter_length); // Object that manages the raw buffer.

eprosima::fastcdr::Cdr deser(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN
#if FASTCDR_VERSION_MAJOR == 1
, eprosima::fastcdr::Cdr::CdrType::DDS_CDR
#endif // FASTCDR_VERSION_MAJOR == 1
);

eprosima::fastcdr::Cdr deser(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN,
eprosima::fastcdr::CdrVersion::XCDRv2);
try
{
// Deserialize encapsulation.
deser.read_encapsulation();
payload.encapsulation = deser.endianness() == eprosima::fastcdr::Cdr::BIG_ENDIANNESS ? CDR_BE : CDR_LE;

deser >> qos_policy.type_information;
qos_policy.assigned(true);
}
Expand Down
58 changes: 29 additions & 29 deletions src/cpp/fastdds/xtypes/type_representation/TypeObjectRegistry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -843,35 +843,6 @@ const MinimalMapType TypeObjectRegistry::build_minimal_from_complete_map_type(
return minimal_map_type;
}

const TypeIdentifier TypeObjectRegistry::minimal_from_complete_type_identifier(
const TypeIdentifier& type_id)
{
if (EK_COMPLETE == type_id._d() ||
(TI_PLAIN_SEQUENCE_SMALL == type_id._d() && type_id.seq_sdefn().header().equiv_kind() == EK_COMPLETE) ||
(TI_PLAIN_SEQUENCE_LARGE == type_id._d() && type_id.seq_ldefn().header().equiv_kind() == EK_COMPLETE) ||
(TI_PLAIN_ARRAY_SMALL == type_id._d() && type_id.array_sdefn().header().equiv_kind() == EK_COMPLETE) ||
(TI_PLAIN_ARRAY_LARGE == type_id._d() && type_id.array_ldefn().header().equiv_kind() == EK_COMPLETE) ||
(TI_PLAIN_MAP_SMALL == type_id._d() && (type_id.map_sdefn().header().equiv_kind() == EK_COMPLETE ||
type_id.map_sdefn().key_identifier()->_d() == EK_COMPLETE)) ||
(TI_PLAIN_MAP_LARGE == type_id._d() && (type_id.map_ldefn().header().equiv_kind() == EK_COMPLETE ||
type_id.map_ldefn().key_identifier()->_d() == EK_COMPLETE)))
{
std::lock_guard<std::mutex> data_guard(type_object_registry_mutex_);
for (const auto& it : local_type_identifiers_)
{
if (it.second.type_identifier1() == type_id)
{
return it.second.type_identifier2();
}
else if (it.second.type_identifier2() == type_id)
{
return it.second.type_identifier1();
}
}
}
return type_id;
}

const MinimalEnumeratedType TypeObjectRegistry::build_minimal_from_complete_enumerated_type(
const CompleteEnumeratedType& complete_enumerated_type)
{
Expand Down Expand Up @@ -946,6 +917,35 @@ void TypeObjectRegistry::register_primitive_type_identifiers()
local_type_identifiers_.insert({char16_type_name, type_ids});
}

const TypeIdentifier TypeObjectRegistry::minimal_from_complete_type_identifier(
const TypeIdentifier& type_id)
{
if (EK_COMPLETE == type_id._d() ||
(TI_PLAIN_SEQUENCE_SMALL == type_id._d() && type_id.seq_sdefn().header().equiv_kind() == EK_COMPLETE) ||
(TI_PLAIN_SEQUENCE_LARGE == type_id._d() && type_id.seq_ldefn().header().equiv_kind() == EK_COMPLETE) ||
(TI_PLAIN_ARRAY_SMALL == type_id._d() && type_id.array_sdefn().header().equiv_kind() == EK_COMPLETE) ||
(TI_PLAIN_ARRAY_LARGE == type_id._d() && type_id.array_ldefn().header().equiv_kind() == EK_COMPLETE) ||
(TI_PLAIN_MAP_SMALL == type_id._d() && (type_id.map_sdefn().header().equiv_kind() == EK_COMPLETE ||
type_id.map_sdefn().key_identifier()->_d() == EK_COMPLETE)) ||
(TI_PLAIN_MAP_LARGE == type_id._d() && (type_id.map_ldefn().header().equiv_kind() == EK_COMPLETE ||
type_id.map_ldefn().key_identifier()->_d() == EK_COMPLETE)))
{
std::lock_guard<std::mutex> data_guard(type_object_registry_mutex_);
for (const auto& it : local_type_identifiers_)
{
if (it.second.type_identifier1() == type_id)
{
return it.second.type_identifier2();
}
else if (it.second.type_identifier2() == type_id)
{
return it.second.type_identifier1();
}
}
}
return type_id;
}

} // xtypes
} // dds
} // fastdds
Expand Down

0 comments on commit 918454a

Please sign in to comment.