Changeset 153:dd442d2fd43f in rrlib_rtti


Ignore:
Timestamp:
22.02.2021 07:18:56 (3 months ago)
Author:
Max Reichardt <mreichardt@…>
Branch:
17.03
Phase:
public
Message:

Makes tType::GetSize() return 0 for empty classes (relevant for finroc_plugins_data_ports tEvent class mainly)

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • detail/tDataTypeInfo.h

    r151 r153  
    114114  } static constexpr value = 
    115115  { 
    116     tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, sizeof(T)) // Type info 
     116    tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, std::is_empty<T>::value ? 0 : sizeof(T)) // Type info 
    117117  }; 
    118118}; 
     
    130130  } static constexpr value = 
    131131  { 
    132     tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, sizeof(T)), // Type info 
     132    tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, std::is_empty<T>::value ? 0 : sizeof(T)), // Type info 
    133133    { rtti::ConstructorFunction<T>::value, rtti::DestructorFunction<T>::value, rtti::DeepCopyFunction<T>::value, EqualsFunction<T>::value } // Binary operations 
    134134  }; 
     
    147147  } static constexpr value = 
    148148  { 
    149     tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, sizeof(T)), // Type info 
     149    tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, std::is_empty<T>::value ? 0 : sizeof(T)), // Type info 
    150150    { rtti::DeserializeFromBinaryFunction<T>::value, rtti::SerializeToBinaryFunction<T>::value } // Binary serialization 
    151151  }; 
     
    165165  } static constexpr value = 
    166166  { 
    167     tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, sizeof(T)), // Type info 
     167    tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, std::is_empty<T>::value ? 0 : sizeof(T)), // Type info 
    168168    { rtti::ConstructorFunction<T>::value, rtti::DestructorFunction<T>::value, rtti::DeepCopyFunction<T>::value, EqualsFunction<T>::value }, // Binary operations 
    169169    { rtti::DeserializeFromBinaryFunction<T>::value, rtti::SerializeToBinaryFunction<T>::value } // Binary serialization 
     
    183183  } static constexpr value = 
    184184  { 
    185     tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, sizeof(T)), // Type info 
     185    tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, std::is_empty<T>::value ? 0 : sizeof(T)), // Type info 
    186186    { std::conditional<serialization::IsStringSerializable<T>::value, rtti::DeserializeFromStringFunction<T>, rtti::DeserializeFromXMLFunction<T>>::type::value, std::conditional<serialization::IsStringSerializable<T>::value, rtti::SerializeToStringFunction<T>, rtti::SerializeToXMLFunction<T>>::type::value } // Other serialization 
    187187  }; 
     
    201201  } static constexpr value = 
    202202  { 
    203     tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, sizeof(T)), // Type info 
     203    tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, std::is_empty<T>::value ? 0 : sizeof(T)), // Type info 
    204204    { rtti::ConstructorFunction<T>::value, rtti::DestructorFunction<T>::value, rtti::DeepCopyFunction<T>::value, EqualsFunction<T>::value }, // Binary operations 
    205205    { std::conditional<serialization::IsStringSerializable<T>::value, rtti::DeserializeFromStringFunction<T>, rtti::DeserializeFromXMLFunction<T>>::type::value, std::conditional<serialization::IsStringSerializable<T>::value, rtti::SerializeToStringFunction<T>, rtti::SerializeToXMLFunction<T>>::type::value } // Other serialization 
     
    221221  } static constexpr value = 
    222222  { 
    223     tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, sizeof(T)), // Type info 
     223    tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, std::is_empty<T>::value ? 0 : sizeof(T)), // Type info 
    224224    { rtti::DeserializeFromBinaryFunction<T>::value, rtti::SerializeToBinaryFunction<T>::value }, // Binary serialization 
    225225    { std::conditional<serialization::IsStringSerializable<T>::value, rtti::DeserializeFromStringFunction<T>, rtti::DeserializeFromXMLFunction<T>>::type::value, std::conditional<serialization::IsStringSerializable<T>::value, rtti::SerializeToStringFunction<T>, rtti::SerializeToXMLFunction<T>>::type::value } // Other serialization 
     
    241241  } static constexpr value = 
    242242  { 
    243     tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, sizeof(T)), // Type info 
     243    tTypeInfo(typeid(T), TypeTraitsVector<T>::value, std::is_same<void, tUnderlying>::value ? nullptr : &tDataTypeInfo<tUnderlying>::value.data_type_info, std::is_same<tElement, void>::value ? &tTypeInfo::cNULL_TYPE_INFO : &tDataTypeInfo<tElement>::value.data_type_info, &shared_info, std::is_empty<T>::value ? 0 : sizeof(T)), // Type info 
    244244    { rtti::ConstructorFunction<T>::value, rtti::DestructorFunction<T>::value, rtti::DeepCopyFunction<T>::value, EqualsFunction<T>::value }, // Binary operations 
    245245    { rtti::DeserializeFromBinaryFunction<T>::value, rtti::SerializeToBinaryFunction<T>::value }, // Binary serialization 
  • tType.h

    r132 r153  
    213213  inline size_t GetArraySize() const 
    214214  { 
    215     return IsArray() ? (GetSize() / GetElementType().GetSize()) : 1; 
     215    return IsArray() ? (GetSize() / std::max<size_t>(1, GetElementType().GetSize())) : 1; 
    216216  } 
    217217 
Note: See TracChangeset for help on using the changeset viewer.