11 #ifndef RTI_DDS_FLAT_FLATTYPETRAITS_HPP_
12 #define RTI_DDS_FLAT_FLATTYPETRAITS_HPP_
14 #include "rti/flat/Offset.hpp"
15 #include "rti/flat/SequenceOffsets.hpp"
16 #include "rti/flat/AggregationBuilders.hpp"
18 namespace rti {
namespace flat {
66 struct flat_type_traits;
68 template <
typename T,
unsigned int N>
69 struct flat_type_traits<FinalArrayOffset<T, N> > {
70 typedef typename flat_type_traits<T>::plain_type plain_type;
73 template <
typename T,
unsigned int N>
74 struct flat_type_traits<PrimitiveArrayOffset<T, N> > {
79 struct flat_type_traits<PrimitiveSequenceOffset<T> > {
83 template <
typename T,
unsigned int N>
84 struct flat_type_traits<FinalAlignedArrayOffset<T, N> > {
85 typedef typename flat_type_traits<T>::plain_type plain_type;
88 template <
typename T,
unsigned int N>
89 struct flat_type_traits<MutableArrayOffset<T, N> > {
90 typedef typename flat_type_traits<T>::plain_type plain_type;
94 struct flat_type_traits<SequenceOffset<T> > {
95 typedef typename flat_type_traits<T>::plain_type plain_type;
99 struct flat_type_traits<StringOffset > :
100 flat_type_traits<PrimitiveSequenceOffset<char> > {
103 template <
typename T>
104 struct flat_type_traits<PrimitiveOffset<T> > {
105 typedef T plain_type;
219 template <
typename OffsetType>
220 typename flat_type_traits<OffsetType>::plain_type*
plain_cast(OffsetType& offset)
222 RTI_FLAT_CHECK_PRECONDITION(offset.is_cpp_compatible(),
return NULL);
223 return reinterpret_cast<typename flat_type_traits<OffsetType>::plain_type*
>(
224 offset.get_buffer());
231 template <
typename OffsetType>
232 const typename flat_type_traits<OffsetType>::plain_type*
plain_cast(
const OffsetType& offset)
234 RTI_FLAT_CHECK_PRECONDITION(offset.is_cpp_compatible(),
return NULL);
235 return reinterpret_cast<const typename flat_type_traits<OffsetType>::plain_type*
>(
236 offset.get_buffer());
241 template <
typename OffsetKind>
242 struct offset_kind_is_fixed_size {
247 struct offset_kind_is_fixed_size<rti::flat::fixed_size_type_tag_t> {
255 template <
typename T>
256 struct is_fixed_size_type
257 : detail::offset_kind_is_fixed_size<typename T::Offset::offset_kind>
263 #endif // RTI_DDS_FLAT_FLATSAMPLE_HPP_