13#ifndef RTI_XCDR_INTERPRETER_HPP_
14#define RTI_XCDR_INTERPRETER_HPP_
16#include "xcdr/xcdr_interpreter.h"
19namespace rti {
namespace xcdr {
28template <
typename TopicType>
33template <
typename TopicType,
bool IsCollection>
34bool has_cpp_friendly_cdr_layout_impl()
36 RTIXCdrUnsignedLongLong size;
37 RTIXCdrAlignment alignment;
38 RTIXCdrXTypesComplianceMask xTypesComplianceMask;
40 xTypesComplianceMask = RTIXCdrInterpreter_getGlobalXtypeComplianceMask();
42 return RTIXCdrTypeCode_hasCFriendlyCdrLayout(
43 type_code<TopicType>::get(),
52 RTIXCdrXTypesComplianceMask_isBitSet(
54 RTI_XCDR_XTYPES_DHEADER_IN_NON_PRIMITIVE_COLLECTIONS_BIT),
55 RTIXCdrXTypesComplianceMask_isBitSet(
57 RTI_XCDR_XTYPES_ENUM_AS_PRIMITIVE_IN_COLLECTIONS_BIT));
62template <
typename TopicType>
63bool has_cpp_friendly_cdr_layout()
66 detail::has_cpp_friendly_cdr_layout_impl<TopicType, false>();
70template <
typename TopicType>
71bool has_cpp_friendly_cdr_layout_collection()
74 detail::has_cpp_friendly_cdr_layout_impl<TopicType, true>();
78struct NoOpPropertyConfigurator {
79 static void configure(RTIXCdrInterpreterProgramsGenProperty&)
117 bool KeysOnly =
false,
118 typename PropertyConfigurator = NoOpPropertyConfigurator>
119struct ProgramsSingleton {
123 RTIXCdrInterpreterProgramsGenProperty
property =
124 RTIXCdrInterpreterProgramsGenProperty_INITIALIZER;
126 configure_property(property);
128 programs_ = RTIXCdrInterpreterPrograms_new(
129 type_code<TopicType>::get(),
136 if (programs_ != NULL) {
137 RTIXCdrInterpreterPrograms_delete(programs_);
141 static void configure_property(
142 RTIXCdrInterpreterProgramsGenProperty& property)
144 property.generateWithAllFields =
145 KeysOnly ? RTI_XCDR_FALSE : RTI_XCDR_TRUE;
146 property.resolveAlias = ResolveAlias ? RTI_XCDR_TRUE : RTI_XCDR_FALSE;
147 property.inlineStruct = InlineStruct ? RTI_XCDR_TRUE : RTI_XCDR_FALSE;
148 property.optimizeEnum = OptimizeEnum ? RTI_XCDR_TRUE : RTI_XCDR_FALSE;
149 PropertyConfigurator::configure(property);
152 RTIXCdrInterpreterPrograms *programs_;
157 static RTIXCdrInterpreterPrograms * get_instance()
159 static ProgramsSingleton<
166 PropertyConfigurator> instance;
167 return instance.programs_;
173 static RTIXCdrInterpreterPrograms *regenerate_programs()
175 RTIXCdrInterpreterPrograms *programs = get_instance();
176 if (programs == NULL) {
180 RTIXCdrInterpreterProgramsGenProperty
property =
181 RTIXCdrInterpreterProgramsGenProperty_INITIALIZER;
182 configure_property(property);
187 RTIXCdrInterpreterPrograms_finalize(programs);
188 if (!RTIXCdrInterpreterPrograms_initialize(
190 type_code<TopicType>::get(),
208 typename PropertyConfigurator>
209RTIXCdrInterpreterPrograms * get_cdr_serialization_programs_w_property_configurator()
211 return ProgramsSingleton<
214 | RTI_XCDR_DESER_PROGRAM
215 | RTI_XCDR_GET_SER_SIZE_PROGRAM
216 | RTI_XCDR_GET_MAX_SER_SIZE_PROGRAM,
221 PropertyConfigurator>::get_instance();
229RTIXCdrInterpreterPrograms * get_cdr_serialization_programs()
231 return ProgramsSingleton<
234 | RTI_XCDR_DESER_PROGRAM
235 | RTI_XCDR_GET_SER_SIZE_PROGRAM
236 | RTI_XCDR_GET_MAX_SER_SIZE_PROGRAM,
241 NoOpPropertyConfigurator>::get_instance();
254template <
typename SampleType>
The RTI namespace.
Definition: AggregationBuilders.hpp:17