RTI Connext Traditional C++ API  Version 6.0.0
 All Classes Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
FlatTypeTraits.hpp
1 /*
2 (c) Copyright, Real-Time Innovations, 2018.
3 All rights reserved.
4 
5 No duplications, whole or partial, manual or electronic, may be made
6 without express written permission. Any such copies, or
7 revisions thereof, must display this notice unaltered.
8 This 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 
18 namespace rti { namespace flat {
19 
20 
64 // For aggregation types, this template is to be specialized in generated code
65 template <typename T>
66 struct flat_type_traits;
67 
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;
71 };
72 
73 template <typename T, unsigned int N>
74 struct flat_type_traits<PrimitiveArrayOffset<T, N> > {
75  typedef T plain_type;
76 };
77 
78 template <typename T>
79 struct flat_type_traits<PrimitiveSequenceOffset<T> > {
80  typedef T plain_type;
81 };
82 
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;
86 };
87 
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;
91 };
92 
93 template <typename T>
94 struct flat_type_traits<SequenceOffset<T> > {
95  typedef typename flat_type_traits<T>::plain_type plain_type;
96 };
97 
98 template <>
99 struct flat_type_traits<StringOffset > :
100  flat_type_traits<PrimitiveSequenceOffset<char> > {
101 };
102 
103 template <typename T>
104 struct flat_type_traits<PrimitiveOffset<T> > {
105  typedef T plain_type;
106 };
107 
191 template <typename OffsetType>
192 typename flat_type_traits<OffsetType>::plain_type* plain_cast(OffsetType& offset)
193 {
194  RTI_FLAT_CHECK_PRECONDITION(offset.is_cpp_compatible(), return NULL);
195  return reinterpret_cast<typename flat_type_traits<OffsetType>::plain_type*>(
196  offset.get_buffer());
197 }
198 
203 template <typename OffsetType>
204 const typename flat_type_traits<OffsetType>::plain_type* plain_cast(const OffsetType& offset)
205 {
206  RTI_FLAT_CHECK_PRECONDITION(offset.is_cpp_compatible(), return NULL);
207  return reinterpret_cast<const typename flat_type_traits<OffsetType>::plain_type*>(
208  offset.get_buffer());
209 }
210 
211 namespace detail {
212 
213 template <typename OffsetKind>
214 struct offset_kind_is_fixed_size {
215  enum { value = 0 };
216 };
217 
218 template <>
219 struct offset_kind_is_fixed_size<rti::flat::fixed_size_type_tag_t> {
220  enum { value = 1 };
221 };
222 
223 }
224 
225 // Utility to determine if a Flat Data type is fixed size (final) or variable
226 // size (mutable)
227 template <typename T>
228 struct is_fixed_size_type
229  : detail::offset_kind_is_fixed_size<typename T::Offset::offset_kind>
230 {
231 };
232 
233 } }
234 
235 #endif // RTI_DDS_FLAT_FLATSAMPLE_HPP_
236 

RTI Connext Traditional C++ API Version 6.0.0 Copyright © Sun Mar 3 2019 Real-Time Innovations, Inc