Skip to content

Commit db72d35

Browse files
Javier Gil Avilescferreiragonz
authored andcommitted
Refs #21358: Delate assert(false) and add log error
Signed-off-by: Javier Gil Aviles <javiergil@eprosima.com>
1 parent 2378c75 commit db72d35

3 files changed

Lines changed: 67 additions & 62 deletions

File tree

src/cpp/fastdds/xtypes/dynamic_types/DynamicDataImpl.cpp

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4302,6 +4302,72 @@ ReturnCode_t DynamicDataImpl::set_primitive_value<TK_STRING16>(
43024302
return ret_value;
43034303
}
43044304

4305+
template<typename T, typename std::enable_if<std::is_integral<T>::value, bool>::type>
4306+
bool DynamicDataImpl::check_new_discriminator_value(
4307+
const T& value)
4308+
{
4309+
bool ret_value = false;
4310+
4311+
if (MEMBER_ID_INVALID != selected_union_member_) // There is a member selected by current discriminator.
4312+
{
4313+
traits<DynamicTypeMember>::ref_type selected_member;
4314+
enclosing_type_->get_member(selected_member, selected_union_member_);
4315+
auto sm_impl = traits<DynamicTypeMember>::narrow<DynamicTypeMemberImpl>(selected_member);
4316+
4317+
if (!sm_impl)
4318+
{
4319+
EPROSIMA_LOG_ERROR(DYNAMIC_DATA,
4320+
"Null DynamicTypeMemberImpl pointer");
4321+
return false;
4322+
}
4323+
4324+
for (auto label : sm_impl->get_descriptor().label())
4325+
{
4326+
if (static_cast<int32_t>(value) == label)
4327+
{
4328+
ret_value = true;
4329+
break;
4330+
}
4331+
}
4332+
}
4333+
4334+
if (MEMBER_ID_INVALID == selected_union_member_ ||
4335+
(MEMBER_ID_INVALID == enclosing_type_->default_union_member() && !ret_value)) // It is selected the implicit default member.
4336+
{
4337+
ret_value = true;
4338+
4339+
if (enclosing_type_->default_value() != static_cast<int32_t>(value))
4340+
{
4341+
for (auto member : enclosing_type_->get_all_members_by_index())
4342+
{
4343+
auto m_impl = traits<DynamicTypeMember>::narrow<DynamicTypeMemberImpl>(member);
4344+
4345+
if (!m_impl)
4346+
{
4347+
ret_value = false;
4348+
continue;
4349+
}
4350+
4351+
for (auto label : m_impl->get_descriptor().label())
4352+
{
4353+
if (static_cast<int32_t>(value) == label)
4354+
{
4355+
ret_value = false;
4356+
break;
4357+
}
4358+
}
4359+
}
4360+
}
4361+
4362+
if (ret_value)
4363+
{
4364+
selected_union_member_ = MEMBER_ID_INVALID;
4365+
}
4366+
}
4367+
4368+
return ret_value;
4369+
}
4370+
43054371
template<TypeKind TK>
43064372
ReturnCode_t DynamicDataImpl::set_sequence_values(
43074373
MemberId id,

src/cpp/fastdds/xtypes/dynamic_types/DynamicDataImpl.hpp

Lines changed: 1 addition & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -481,67 +481,7 @@ class DynamicDataImpl : public traits<DynamicData>::base_type
481481
*/
482482
template<typename T, typename std::enable_if<std::is_integral<T>::value, bool>::type = true>
483483
bool check_new_discriminator_value(
484-
const T& value)
485-
{
486-
bool ret_value = false;
487-
488-
if (MEMBER_ID_INVALID != selected_union_member_) // There is a member selected by current discriminator.
489-
{
490-
traits<DynamicTypeMember>::ref_type selected_member;
491-
enclosing_type_->get_member(selected_member, selected_union_member_);
492-
auto sm_impl = traits<DynamicTypeMember>::narrow<DynamicTypeMemberImpl>(selected_member);
493-
494-
if (!sm_impl)
495-
{
496-
return false;
497-
}
498-
499-
for (auto label : sm_impl->get_descriptor().label())
500-
{
501-
if (static_cast<int32_t>(value) == label)
502-
{
503-
ret_value = true;
504-
break;
505-
}
506-
}
507-
}
508-
509-
if (MEMBER_ID_INVALID == selected_union_member_ ||
510-
(MEMBER_ID_INVALID == enclosing_type_->default_union_member() && !ret_value)) // It is selected the implicit default member.
511-
{
512-
ret_value = true;
513-
514-
if (enclosing_type_->default_value() != static_cast<int32_t>(value))
515-
{
516-
for (auto member : enclosing_type_->get_all_members_by_index())
517-
{
518-
auto m_impl = traits<DynamicTypeMember>::narrow<DynamicTypeMemberImpl>(member);
519-
520-
if (!m_impl)
521-
{
522-
ret_value = false;
523-
continue;
524-
}
525-
526-
for (auto label : m_impl->get_descriptor().label())
527-
{
528-
if (static_cast<int32_t>(value) == label)
529-
{
530-
ret_value = false;
531-
break;
532-
}
533-
}
534-
}
535-
}
536-
537-
if (ret_value)
538-
{
539-
selected_union_member_ = MEMBER_ID_INVALID;
540-
}
541-
}
542-
543-
return ret_value;
544-
}
484+
const T& value);
545485

546486
template<typename T, typename std::enable_if<!std::is_integral<T>::value, bool>::type = true>
547487
bool check_new_discriminator_value(

src/cpp/fastdds/xtypes/dynamic_types/DynamicTypeBuilderImpl.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ DynamicTypeBuilderImpl::DynamicTypeBuilderImpl(
6161
members_.back())};
6262
if (!member_impl)
6363
{
64-
assert(false);
6564
EPROSIMA_LOG_ERROR(DYN_TYPES,
6665
"Internal error: last member is not a DynamicTypeMemberImpl.");
6766
}

0 commit comments

Comments
 (0)