RTI Connext Traditional C++ API Version 7.7.0
FlatTypeTraits.hpp
1/*
2(c) Copyright, Real-Time Innovations, 2018.
3All rights reserved.
4
5No duplications, whole or partial, manual or electronic, may be made
6without express written permission. Any such copies, or
7revisions thereof, must display this notice unaltered.
8This code contains trade secrets of Real-Time Innovations, Inc.
9*/
10
11#ifndef RTI_DDS_FLAT_FLATTYPETRAITS_HPP_
12#define RTI_DDS_FLAT_FLATTYPETRAITS_HPP_
13
14#include "rti/flat/Offset.hpp"
15#include "rti/flat/SequenceOffsets.hpp"
16#include "rti/flat/AggregationBuilders.hpp"
17
18namespace rti { namespace flat {
19
20
64// For aggregation types, this template is to be specialized in generated code
65template <typename T>
66struct flat_type_traits;
67
68template <typename T, unsigned int N>
69struct flat_type_traits<FinalArrayOffset<T, N> > {
70 typedef typename flat_type_traits<T>::plain_type plain_type;
71};
72
73template <typename T, unsigned int N>
74struct flat_type_traits<PrimitiveArrayOffset<T, N> > {
75 typedef T plain_type;
76};
77
78template <typename T>
79struct flat_type_traits<PrimitiveSequenceOffset<T> > {
80 typedef T plain_type;
81};
82
83template <typename T, unsigned int N>
84struct flat_type_traits<FinalAlignedArrayOffset<T, N> > {
85 typedef typename flat_type_traits<T>::plain_type plain_type;
86};
87
88template <typename T, unsigned int N>
89struct flat_type_traits<MutableArrayOffset<T, N> > {
90 typedef typename flat_type_traits<T>::plain_type plain_type;
91};
92
93template <typename T>
94struct flat_type_traits<SequenceOffset<T> > {
95 typedef typename flat_type_traits<T>::plain_type plain_type;
96};
97
98template <>
99struct flat_type_traits<StringOffset > :
100 flat_type_traits<PrimitiveSequenceOffset<char> > {
101};
102
103template <typename T>
104struct flat_type_traits<PrimitiveOffset<T> > {
105 typedef T plain_type;
106};
107
219template <typename OffsetType>
221{
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());
225}
226
231template <typename OffsetType>
232const typename flat_type_traits<OffsetType>::plain_type* plain_cast(const OffsetType& offset)
233{
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());
237}
238
239namespace detail {
240
241template <typename OffsetKind>
242struct offset_kind_is_fixed_size {
243 enum { value = 0 };
244};
245
246template <>
247struct offset_kind_is_fixed_size<rti::flat::fixed_size_type_tag_t> {
248 enum { value = 1 };
249};
250
251}
252
253// Utility to determine if a Flat Data type is fixed size (final) or variable
254// size (mutable)
255template <typename T>
256struct is_fixed_size_type
257 : detail::offset_kind_is_fixed_size<typename T::Offset::offset_kind>
258{
259};
260
261} }
262
263#endif // RTI_DDS_FLAT_FLATSAMPLE_HPP_
264
flat_type_traits< OffsetType >::plain_type * plain_cast(OffsetType &offset)
Casts into an equivalent plain C++ type.
Definition: FlatTypeTraits.hpp:220
The RTI namespace.
Definition: AggregationBuilders.hpp:18
Given a Sample, an Offset or a Builder, it allows obtaining the other types.
Definition: FlatSample.hpp:340