RTI Connext Traditional C++ API  Version 6.0.1
 All Classes Namespaces 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 
219 template <typename OffsetType>
220 typename flat_type_traits<OffsetType>::plain_type* plain_cast(OffsetType& offset)
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 
231 template <typename OffsetType>
232 const 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 
239 namespace detail {
240 
241 template <typename OffsetKind>
242 struct offset_kind_is_fixed_size {
243  enum { value = 0 };
244 };
245 
246 template <>
247 struct 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)
255 template <typename T>
256 struct 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 

RTI Connext Traditional C++ API Version 6.0.1 Copyright © Sat Nov 23 2019 Real-Time Innovations, Inc