11#ifndef RTI_DDS_FLAT_BUILDERHELPER_HPP_
12#define RTI_DDS_FLAT_BUILDERHELPER_HPP_
14namespace rti {
namespace flat {
17class PrimitiveSequenceBuilder;
19template <
typename ElementBuilder>
20class MutableSequenceBuilder;
22template <
typename ElementOffset>
23class FinalSequenceBuilder;
25template <
typename ElementBuilder,
unsigned int N>
26class MutableArrayBuilder;
36template <
size_t PrimitiveSize>
37struct primitive_lc_code_helper;
40struct primitive_lc_code_helper<1> {
48struct primitive_lc_code_helper<2> {
56struct primitive_lc_code_helper<4> {
64struct primitive_lc_code_helper<8> {
72struct primitive_lc_code {
73 enum { value = primitive_lc_code_helper<
sizeof(T)>::single };
79template <
typename T,
typename Enable =
void>
91struct lc_code<MutableSequenceBuilder<T> > {
94 return is_dheader_required_in_non_primitive_collections() ? 5 : 4;
99struct lc_code<FinalSequenceBuilder<T> > {
102 return is_dheader_required_in_non_primitive_collections() ? 5 : 4;
106template <
typename T,
unsigned int N>
107struct lc_code<MutableArrayBuilder<T, N> > {
110 return is_dheader_required_in_non_primitive_collections() ? 5 : 4;
114#if defined(RTI_FLAT_DATA_NO_EXCEPTIONS)
119struct lc_code<PrimitiveSequenceBuilder<T> > {
122 return primitive_lc_code_helper<
sizeof(T)>::sequence;
130 PrimitiveSequenceBuilder<T>,
131 typename std::enable_if<!std::is_enum<T>::value>::type> {
134 return primitive_lc_code_helper<
sizeof(T)>::sequence;
140 PrimitiveSequenceBuilder<T>,
141 typename std::enable_if<std::is_enum<T>::value>::type> {
144 return is_dheader_required_in_enum_collections()
146 : primitive_lc_code_helper<
sizeof(T)>::sequence;
157template <
typename Offset>
158struct final_offset_initializer {
160 static bool initialize(Offset& offset)
162 return RTI_XCDR_TRUE == RTIXCdrFlatData_initializeSample(
163 (
char *) offset.get_buffer(),
164 offset.get_buffer_size(),
172template <
typename T,
typename Enable =
void>
173struct default_primitive_value {
180template <
typename T,
unsigned int N>
181struct final_offset_initializer<
rti::flat::PrimitiveArrayOffset<T, N> > {
185 T default_value = default_primitive_value<T>::get();
186 if (default_value == (T) 0) {
197template <
typename T,
unsigned int N>
198struct final_offset_initializer<
rti::flat::FinalAlignedArrayOffset<T, N> > {
202 for (
unsigned int i = 0; i < N; i++) {
204 if (offset.is_null()) {
208 if (!final_offset_initializer<T>::initialize(offset)) {
bool set_element(unsigned int i, T value)
Sets an element by index.
Definition: SequenceOffsets.hpp:111
Offset to an array of final elements.
Definition: SequenceOffsets.hpp:776
ElementOffset get_element(unsigned int i)
Gets the Offset to an element.
Definition: SequenceOffsets.hpp:815
const unsigned char * get_buffer() const
Gets this member's position in the buffer.
Definition: Offset.hpp:627
offset_t get_buffer_size() const
Gets the size, in bytes, of this member in the buffer.
Definition: Offset.hpp:641
Offset to an array of primitive elements.
Definition: SequenceOffsets.hpp:241
unsigned int element_count() const
Returns the number of elements, N.
Definition: SequenceOffsets.hpp:263
The generic definition of FlatData topic-types.
Definition: FlatSample.hpp:148
The RTI namespace.
Definition: AggregationBuilders.hpp:17