OpenDDS  Snapshot(2023/04/07-19:43)
Public Types | Public Member Functions | Public Attributes | List of all members
OpenDDS::XTypes::DynamicDataImpl::DataContainer Struct Reference
Collaboration diagram for OpenDDS::XTypes::DynamicDataImpl::DataContainer:
Collaboration graph
[legend]

Public Types

typedef OPENDDS_MAP(DDS::MemberId, SingleValue) typedef OPENDDS_MAP(DDS::MemberId, SequenceValue) typedef OPENDDS_MAP(DDS::MemberId, DDS::DynamicData_var) DataContainer(const DDS::DynamicType_var &type, const DynamicDataImpl *data)
 

Public Member Functions

 DataContainer (const DataContainer &other, const DynamicDataImpl *data)
 
void clear ()
 
bool get_largest_single_index (CORBA::ULong &index) const
 
bool get_largest_sequence_index (CORBA::ULong &index) const
 
bool get_largest_complex_index (CORBA::ULong &index) const
 
bool get_largest_index_basic (CORBA::ULong &index) const
 
bool get_largest_index_basic_sequence (CORBA::ULong &index) const
 
bool serialize_single_value (DCPS::Serializer &ser, const SingleValue &sv) const
 
template<typename PrimitiveType >
bool serialize_primitive_value (DCPS::Serializer &ser, PrimitiveType default_value) const
 
bool serialized_size_enum (const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &enum_type) const
 
bool serialize_enum_default_value (DCPS::Serializer &ser, const DDS::DynamicType_var &enum_type) const
 
bool serialize_enum_value (DCPS::Serializer &ser) const
 
bool serialized_size_bitmask (const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &bitmask_type) const
 
bool serialize_bitmask_default_value (DCPS::Serializer &ser, const DDS::DynamicType_var &bitmask_type) const
 
bool serialize_bitmask_value (DCPS::Serializer &ser) const
 
bool reconstruct_string_value (CORBA::Char *str) const
 
bool serialized_size_string (const DCPS::Encoding &encoding, size_t &size) const
 
bool serialize_string_value (DCPS::Serializer &ser) const
 
bool reconstruct_wstring_value (CORBA::WChar *wstr) const
 
bool serialized_size_wstring (const DCPS::Encoding &encoding, size_t &size) const
 
bool serialize_wstring_value (DCPS::Serializer &ser) const
 
void serialized_size_primitive_sequence (const DCPS::Encoding &encoding, size_t &size, TypeKind elem_tk, CORBA::ULong length) const
 
void set_default_basic_value (CORBA::Long &value) const
 
void set_default_basic_value (CORBA::ULong &value) const
 
void set_default_basic_value (ACE_OutputCDR::from_int8 &value) const
 
void set_default_basic_value (ACE_OutputCDR::from_uint8 &value) const
 
void set_default_basic_value (CORBA::Short &value) const
 
void set_default_basic_value (CORBA::UShort &value) const
 
void set_default_basic_value (CORBA::LongLong &value) const
 
void set_default_basic_value (CORBA::ULongLong &value) const
 
void set_default_basic_value (CORBA::Float &value) const
 
void set_default_basic_value (CORBA::Double &value) const
 
void set_default_basic_value (CORBA::LongDouble &value) const
 
void set_default_basic_value (ACE_OutputCDR::from_char &value) const
 
void set_default_basic_value (ACE_OutputCDR::from_octet &value) const
 
void set_default_basic_value (const char *&value) const
 
void set_default_basic_value (char *&value) const
 
void set_default_basic_value (ACE_OutputCDR::from_boolean &value) const
 
bool set_default_enum_value (const DDS::DynamicType_var &dt, CORBA::Long &value) const
 
void set_default_bitmask_value (ACE_OutputCDR::from_uint8 &value) const
 
void set_default_bitmask_value (CORBA::UShort &value) const
 
void set_default_bitmask_value (CORBA::ULong &value) const
 
void set_default_bitmask_value (CORBA::ULongLong &value) const
 
template<typename Type >
void set_default_bitmask_value (Type &value) const
 
void set_default_primitive_values (DDS::Int8Seq &collection) const
 
void set_default_primitive_values (DDS::UInt8Seq &collection) const
 
void set_default_primitive_values (DDS::CharSeq &collection) const
 
void set_default_primitive_values (DDS::ByteSeq &collection) const
 
void set_default_primitive_values (DDS::BooleanSeq &collection) const
 
template<typename CollectionType >
void set_default_primitive_values (CollectionType &collection) const
 
template<typename ElementType , typename CollectionType >
bool set_primitive_values (CollectionType &collection, CORBA::ULong bound, const ElementType &elem_tag) const
 
template<typename ElementType , typename CollectionType >
bool reconstruct_primitive_collection (CollectionType &collection, CORBA::ULong size, CORBA::ULong bound, const ElementType &elem_tag) const
 
bool serialize_primitive_sequence (DCPS::Serializer &ser, TypeKind elem_tk, CORBA::ULong size, CORBA::ULong bound) const
 
void serialized_size_string_common (const DCPS::Encoding &encoding, size_t &size, const char *str) const
 
void serialized_size_string_common (const DCPS::Encoding &encoding, size_t &size, const SingleValue &sv) const
 
template<typename StringType >
bool serialized_size_generic_string_collection (const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
 
template<typename StringType >
bool serialized_size_generic_string_sequence (const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
 
template<typename StringType >
bool serialize_generic_string_collection (DCPS::Serializer &ser, const IndexToIdMap &index_to_id) const
 
template<typename StringType >
bool serialize_generic_string_sequence (DCPS::Serializer &ser, CORBA::ULong length, CORBA::ULong bound) const
 
template<typename ElementType , typename CollectionType >
bool set_default_enum_values (CollectionType &collection, const DDS::DynamicType_var &enum_type) const
 
template<typename ElementType , typename WrapElementType , typename CollectionType >
bool reconstruct_enum_collection (CollectionType &collection, CORBA::ULong size, CORBA::ULong bound, const DDS::DynamicType_var &enum_type, const WrapElementType &elem_tag) const
 
void serialized_size_enum_sequence_as_int8s (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
 
void serialized_size_enum_sequence (const DCPS::Encoding &encoding, size_t &size, const DDS::Int8Seq &seq) const
 
bool serialize_enum_sequence_as_ints_i (DCPS::Serializer &ser, const DDS::Int8Seq &enumseq) const
 
bool serialize_enum_sequence_as_int8s (DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound, const DDS::DynamicType_var &enum_type) const
 
void serialized_size_enum_sequence_as_int16s (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
 
void serialized_size_enum_sequence (const DCPS::Encoding &encoding, size_t &size, const DDS::Int16Seq &seq) const
 
bool serialize_enum_sequence_as_ints_i (DCPS::Serializer &ser, const DDS::Int16Seq &enumseq) const
 
bool serialize_enum_sequence_as_int16s (DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound, const DDS::DynamicType_var &enum_type) const
 
void serialized_size_enum_sequence_as_int32s (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
 
void serialized_size_enum_sequence (const DCPS::Encoding &encoding, size_t &size, const DDS::Int32Seq &seq) const
 
bool serialize_enum_sequence_as_ints_i (DCPS::Serializer &ser, const DDS::Int32Seq &enumseq) const
 
bool serialize_enum_sequence_as_int32s (DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound, const DDS::DynamicType_var &enum_type) const
 
void serialized_size_enum_sequence (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length, CORBA::ULong bitbound) const
 
bool serialize_enum_sequence (DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bitbound, CORBA::ULong seqbound, const DDS::DynamicType_var &enum_type) const
 
template<typename CollectionType >
void set_default_bitmask_values (CollectionType &col) const
 
template<typename WrapElementType , typename CollectionType >
bool reconstruct_bitmask_collection (CollectionType &collection, CORBA::ULong size, CORBA::ULong bound, const WrapElementType &elem_tag) const
 
void serialized_size_bitmask_sequence_as_uint8s (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
 
void serialized_size_bitmask_sequence (const DCPS::Encoding &encoding, size_t &size, const DDS::UInt8Seq &seq) const
 
bool serialize_bitmask_sequence_as_uints_i (DCPS::Serializer &ser, const DDS::UInt8Seq &bitmask_seq) const
 
bool serialize_bitmask_sequence_as_uint8s (DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound) const
 
void serialized_size_bitmask_sequence_as_uint16s (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
 
void serialized_size_bitmask_sequence (const DCPS::Encoding &encoding, size_t &size, const DDS::UInt16Seq &seq) const
 
bool serialize_bitmask_sequence_as_uints_i (DCPS::Serializer &ser, const DDS::UInt16Seq &bitmask_seq) const
 
bool serialize_bitmask_sequence_as_uint16s (DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound) const
 
void serialized_size_bitmask_sequence_as_uint32s (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
 
void serialized_size_bitmask_sequence (const DCPS::Encoding &encoding, size_t &size, const DDS::UInt32Seq &seq) const
 
bool serialize_bitmask_sequence_as_uints_i (DCPS::Serializer &ser, const DDS::UInt32Seq &bitmask_seq) const
 
bool serialize_bitmask_sequence_as_uint32s (DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound) const
 
void serialized_size_bitmask_sequence_as_uint64s (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
 
void serialized_size_bitmask_sequence (const DCPS::Encoding &encoding, size_t &size, const DDS::UInt64Seq &seq) const
 
bool serialize_bitmask_sequence_as_uints_i (DCPS::Serializer &ser, const DDS::UInt64Seq &bitmask_seq) const
 
bool serialize_bitmask_sequence_as_uint64s (DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound) const
 
void serialized_size_bitmask_sequence (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length, CORBA::ULong bitbound) const
 
bool serialize_bitmask_sequence (DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bitbound, CORBA::ULong seqbound) const
 
bool serialized_size_sequence_value (const DCPS::Encoding &encoding, size_t &size, const SequenceValue &sv) const
 
bool serialize_sequence_value (DCPS::Serializer &ser, const SequenceValue &sv) const
 
bool get_index_to_id_map (IndexToIdMap &index_to_id, CORBA::ULong bound) const
 
bool serialized_size_complex_member_i (const DCPS::Encoding &encoding, size_t &size, DDS::MemberId id, DCPS::Sample::Extent ext) const
 
template<typename SequenceType >
bool serialized_size_nested_basic_sequences (const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, SequenceType protoseq) const
 
template<typename SequenceType >
bool serialized_size_nesting_basic_sequence (const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, SequenceType protoseq) const
 
bool serialize_complex_member_i (DCPS::Serializer &ser, DDS::MemberId id, DCPS::Sample::Extent ext) const
 
template<typename SequenceType >
bool serialize_nested_basic_sequences (DCPS::Serializer &ser, const IndexToIdMap &index_to_id, SequenceType protoseq) const
 
template<typename SequenceType >
bool serialize_nesting_basic_sequence_i (DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound, SequenceType protoseq) const
 
bool serialized_size_nesting_basic_sequence (const DCPS::Encoding &encoding, size_t &size, TypeKind nested_elem_tk, const IndexToIdMap &index_to_id) const
 
bool serialize_nesting_basic_sequence (DCPS::Serializer &ser, TypeKind nested_elem_tk, CORBA::ULong size, CORBA::ULong bound) const
 
bool serialized_size_nested_enum_sequences (const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
 
bool serialized_size_nesting_enum_sequence (const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
 
bool serialize_nested_enum_sequences (DCPS::Serializer &ser, const IndexToIdMap &index_to_id) const
 
bool serialize_nesting_enum_sequence (DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound) const
 
bool serialized_size_nested_bitmask_sequences (const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
 
bool serialized_size_nesting_bitmask_sequence (const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
 
bool serialize_nested_bitmask_sequences (DCPS::Serializer &ser, const IndexToIdMap &index_to_id) const
 
bool serialize_nesting_bitmask_sequence (DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound) const
 
bool serialized_size_complex_member (const DCPS::Encoding &encoding, size_t &size, DDS::MemberId id, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const
 
bool serialized_size_complex_sequence (const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const
 
bool serialize_complex_sequence_i (DCPS::Serializer &ser, const IndexToIdMap &index_to_id, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const
 
bool serialize_complex_sequence (DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const
 
bool get_index_to_id_from_complex (IndexToIdMap &index_to_id, CORBA::ULong bound) const
 
bool serialized_size_sequence (const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
 
bool serialize_sequence (DCPS::Serializer &ser, DCPS::Sample::Extent ext) const
 
void serialized_size_primitive_array (const DCPS::Encoding &encoding, size_t &size, TypeKind elem_tk, CORBA::ULong length) const
 
bool serialize_primitive_array (DCPS::Serializer &ser, TypeKind elem_tk, CORBA::ULong length) const
 
template<typename StringType >
bool serialized_size_generic_string_array (const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
 
template<typename StringType >
bool serialize_generic_string_array (DCPS::Serializer &ser, CORBA::ULong length) const
 
void serialized_size_enum_array_as_int8s (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
 
bool serialize_enum_array_as_ints_i (DCPS::Serializer &ser, const DDS::Int8Seq &enumarr) const
 
bool serialize_enum_array_as_int8s (DCPS::Serializer &ser, CORBA::ULong length, const DDS::DynamicType_var &enum_type) const
 
void serialized_size_enum_array_as_int16s (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
 
bool serialize_enum_array_as_ints_i (DCPS::Serializer &ser, const DDS::Int16Seq &enumarr) const
 
bool serialize_enum_array_as_int16s (DCPS::Serializer &ser, CORBA::ULong length, const DDS::DynamicType_var &enum_type) const
 
void serialized_size_enum_array_as_int32s (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
 
bool serialize_enum_array_as_ints_i (DCPS::Serializer &ser, const DDS::Int32Seq &enumarr) const
 
bool serialize_enum_array_as_int32s (DCPS::Serializer &ser, CORBA::ULong length, const DDS::DynamicType_var &enum_type) const
 
void serialized_size_enum_array (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length, CORBA::ULong bitbound) const
 
bool serialize_enum_array (DCPS::Serializer &ser, CORBA::ULong bitbound, CORBA::ULong length, const DDS::DynamicType_var &enum_type) const
 
void serialized_size_bitmask_array_as_uint8s (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
 
bool serialize_bitmask_array_as_uints_i (DCPS::Serializer &ser, const DDS::UInt8Seq &bitmask_arr) const
 
bool serialize_bitmask_array_as_uint8s (DCPS::Serializer &ser, CORBA::ULong length) const
 
void serialized_size_bitmask_array_as_uint16s (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
 
bool serialize_bitmask_array_as_uints_i (DCPS::Serializer &ser, const DDS::UInt16Seq &bitmask_arr) const
 
bool serialize_bitmask_array_as_uint16s (DCPS::Serializer &ser, CORBA::ULong length) const
 
void serialized_size_bitmask_array_as_uint32s (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
 
bool serialize_bitmask_array_as_uints_i (DCPS::Serializer &ser, const DDS::UInt32Seq &bitmask_arr) const
 
bool serialize_bitmask_array_as_uint32s (DCPS::Serializer &ser, CORBA::ULong length) const
 
void serialized_size_bitmask_array_as_uint64s (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
 
bool serialize_bitmask_array_as_uints_i (DCPS::Serializer &ser, const DDS::UInt64Seq &bitmask_arr) const
 
bool serialize_bitmask_array_as_uint64s (DCPS::Serializer &ser, CORBA::ULong length) const
 
void serialized_size_bitmask_array (const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length, CORBA::ULong bitbound) const
 
bool serialize_bitmask_array (DCPS::Serializer &ser, CORBA::ULong bitbound, CORBA::ULong length) const
 
template<typename SequenceType >
bool serialized_size_nesting_basic_array (const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, SequenceType protoseq) const
 
template<typename SequenceType >
bool serialize_nesting_basic_array_i (DCPS::Serializer &ser, CORBA::ULong length, SequenceType protoseq) const
 
bool serialized_size_nesting_basic_array (const DCPS::Encoding &encoding, size_t &size, TypeKind nested_elem_tk, const IndexToIdMap &index_to_id) const
 
bool serialize_nesting_basic_array (DCPS::Serializer &ser, TypeKind nested_elem_tk, CORBA::ULong length) const
 
bool serialized_size_nesting_enum_array (const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
 
bool serialize_nesting_enum_array (DCPS::Serializer &ser, CORBA::ULong length) const
 
bool serialized_size_nesting_bitmask_array (const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
 
bool serialize_nesting_bitmask_array (DCPS::Serializer &ser, CORBA::ULong length) const
 
bool serialized_size_complex_array (const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const
 
bool serialize_complex_array (DCPS::Serializer &ser, CORBA::ULong length, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const
 
bool serialized_size_array (const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
 
bool serialize_array (DCPS::Serializer &ser, DCPS::Sample::Extent ext) const
 
bool serialized_size_primitive_member (const DCPS::Encoding &encoding, size_t &size, TypeKind member_tk) const
 
bool serialized_size_basic_member_default_value (const DCPS::Encoding &encoding, size_t &size, TypeKind member_tk) const
 
bool serialized_size_basic_member (const DCPS::Encoding &encoding, size_t &size, TypeKind member_tk, const_single_iterator it) const
 
bool serialize_basic_member_default_value (DCPS::Serializer &ser, TypeKind member_tk) const
 
bool serialized_size_single_aggregated_member_xcdr2 (const DCPS::Encoding &encoding, size_t &size, const_single_iterator it, const DDS::DynamicType_var &member_type, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total) const
 
bool serialize_single_aggregated_member_xcdr2 (DCPS::Serializer &ser, const_single_iterator it, const DDS::DynamicType_var &member_type, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility) const
 
bool serialized_size_complex_aggregated_member_xcdr2_default (const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &member_type, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total, DCPS::Sample::Extent ext) const
 
bool serialize_complex_aggregated_member_xcdr2_default (DCPS::Serializer &ser, DDS::MemberId id, const DDS::DynamicType_var &member_type, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility, DCPS::Sample::Extent ext) const
 
bool serialized_size_complex_aggregated_member_xcdr2 (const DCPS::Encoding &encoding, size_t &size, const_complex_iterator it, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total, DCPS::Sample::Extent ext) const
 
bool serialize_complex_aggregated_member_xcdr2 (DCPS::Serializer &ser, const_complex_iterator it, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility, DCPS::Sample::Extent ext) const
 
bool serialized_size_basic_struct_member_xcdr2 (const DCPS::Encoding &encoding, size_t &size, DDS::MemberId id, const DDS::DynamicType_var &member_type, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total) const
 
bool serialize_basic_struct_member_xcdr2 (DCPS::Serializer &ser, DDS::MemberId id, const DDS::DynamicType_var &member_type, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility) const
 
void serialized_size_sequence_member_default_value (const DCPS::Encoding &encoding, size_t &size, TypeKind elem_tk) const
 
bool serialize_sequence_member_default_value (DCPS::Serializer &ser, TypeKind elem_tk) const
 
bool serialized_size_basic_sequence (const DCPS::Encoding &encoding, size_t &size, const_sequence_iterator it) const
 
bool serialize_basic_sequence (DCPS::Serializer &ser, const_sequence_iterator it) const
 
bool serialized_size_enum_sequence (const DCPS::Encoding &encoding, size_t &size, const_sequence_iterator it) const
 
bool serialize_enum_sequence (DCPS::Serializer &ser, const_sequence_iterator it) const
 
bool serialized_size_bitmask_sequence (const DCPS::Encoding &encoding, size_t &size, const_sequence_iterator it) const
 
bool serialize_bitmask_sequence (DCPS::Serializer &ser, const_sequence_iterator it) const
 
void serialized_size_sequence_aggregated_member_xcdr2 (const DCPS::Encoding &encoding, size_t &size, const_sequence_iterator it, TypeKind elem_tk, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total) const
 
bool serialize_sequence_aggregated_member_xcdr2 (DCPS::Serializer &ser, const_sequence_iterator it, TypeKind elem_tk, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility) const
 
bool serialized_size_sequence_struct_member_xcdr2 (const DCPS::Encoding &encoding, size_t &size, DDS::MemberId id, TypeKind elem_tk, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total, DCPS::Sample::Extent ext) const
 
bool serialize_sequence_struct_member_xcdr2 (DCPS::Serializer &ser, DDS::MemberId id, TypeKind elem_tk, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility, DCPS::Sample::Extent ext) const
 
bool serialized_size_structure_xcdr2 (const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
 
bool serialize_structure_xcdr2 (DCPS::Serializer &ser, DCPS::Sample::Extent ext) const
 
bool serialized_size_structure_xcdr1 (const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
 
bool serialize_structure_xcdr1 (DCPS::Serializer &ser, DCPS::Sample::Extent ext) const
 
bool serialized_size_structure (const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
 
bool serialize_structure (DCPS::Serializer &ser, DCPS::Sample::Extent) const
 
bool set_default_discriminator_value (CORBA::Long &value, const DDS::DynamicType_var &disc_type) const
 
bool get_discriminator_value (CORBA::Long &value, const_single_iterator single_it, const_complex_iterator complex_it, const DDS::DynamicType_var &disc_type) const
 
bool serialized_size_discriminator_member_xcdr2 (const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &disc_type, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total) const
 
bool serialize_discriminator_member_xcdr2 (DCPS::Serializer &ser, CORBA::Long value, const DDS::DynamicType_var &disc_type, DDS::ExtensibilityKind extensibility) const
 
bool serialized_size_selected_member_xcdr2 (const DCPS::Encoding &encoding, size_t &size, DDS::MemberId selected_id, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total) const
 
bool serialize_selected_member_xcdr2 (DCPS::Serializer &ser, DDS::MemberId selected_id, DDS::ExtensibilityKind extensibility) const
 
bool select_union_member (CORBA::Long disc_value, bool &found_selected_member, DDS::MemberDescriptor_var &selected_md) const
 
bool serialized_size_union_xcdr2 (const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
 
bool serialize_union_xcdr2 (DCPS::Serializer &ser, DCPS::Sample::Extent ext) const
 
bool serialized_size_union_xcdr1 (const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
 
bool serialize_union_xcdr1 (DCPS::Serializer &ser, DCPS::Sample::Extent ext) const
 
bool serialized_size_union (const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
 
bool serialize_union (DCPS::Serializer &ser, DCPS::Sample::Extent ext) const
 
 OPENDDS_MAP (DDS::MemberId, SingleValue) single_map_
 
 OPENDDS_MAP (DDS::MemberId, SequenceValue) sequence_map_
 
 OPENDDS_MAP (DDS::MemberId, DDS::DynamicData_var) complex_map_
 
template<>
bool set_primitive_values (DDS::BooleanSeq &collection, CORBA::ULong bound, const ACE_OutputCDR::from_boolean &) const
 
template<>
bool set_primitive_values (DDS::ByteSeq &collection, CORBA::ULong bound, const ACE_OutputCDR::from_octet &) const
 
template<>
bool set_primitive_values (DDS::Int8Seq &collection, CORBA::ULong bound, const ACE_OutputCDR::from_int8 &) const
 
template<>
bool set_primitive_values (DDS::UInt8Seq &collection, CORBA::ULong bound, const ACE_OutputCDR::from_uint8 &) const
 
template<>
bool set_primitive_values (DDS::CharSeq &collection, CORBA::ULong bound, const ACE_OutputCDR::from_char &) const
 

Public Attributes

const DDS::DynamicType_var & type_
 
const DynamicDataImpldata_
 

Detailed Description

Definition at line 535 of file DynamicDataImpl.h.

Member Typedef Documentation

◆ DataContainer

typedef OPENDDS_MAP (DDS::MemberId, SingleValue) typedef OPENDDS_MAP (DDS::MemberId, SequenceValue) typedef OPENDDS_MAP (DDS::MemberId, DDS::DynamicData_var) OpenDDS::XTypes::DynamicDataImpl::DataContainer::DataContainer(const DDS::DynamicType_var &type, const DynamicDataImpl *data)
inline

Definition at line 540 of file DynamicDataImpl.h.

541  : type_(type), data_(data) {}

Constructor & Destructor Documentation

◆ DataContainer()

OpenDDS::XTypes::DynamicDataImpl::DataContainer::DataContainer ( const DataContainer other,
const DynamicDataImpl data 
)
inline

Definition at line 543 of file DynamicDataImpl.h.

References OpenDDS::STUN::encoding(), OpenDDS::XTypes::extensibility(), and OpenDDS::XTypes::OPENDDS_MAP().

544  : single_map_(other.single_map_)
545  , sequence_map_(other.sequence_map_)
546  , complex_map_(other.complex_map_)
547  , type_(data->type_)
548  , data_(data)
549  {}

Member Function Documentation

◆ clear()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::clear ( void  )

Definition at line 4033 of file DynamicDataImpl.cpp.

Referenced by OpenDDS::XTypes::DynamicDataImpl::clear_container().

4034 {
4035  single_map_.clear();
4036  complex_map_.clear();
4037  sequence_map_.clear();
4038 }

◆ get_discriminator_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::get_discriminator_value ( CORBA::Long value,
const_single_iterator  single_it,
const_complex_iterator  complex_it,
const DDS::DynamicType_var &  disc_type 
) const

Definition at line 8199 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::container_, and OpenDDS::XTypes::MEMBER_ID_INVALID.

8202 {
8203  if (single_it != single_map_.end()) {
8204  data_->read_discriminator(value, disc_type, single_it);
8205  } else { // Find in complex map
8206  const DynamicDataImpl* dd_impl = dynamic_cast<const DynamicDataImpl*>(complex_it->second.in());
8207  if (!dd_impl) {
8208  return false;
8209  }
8210  const_single_iterator it = dd_impl->container_.single_map_.find(MEMBER_ID_INVALID);
8211  if (it != dd_impl->container_.single_map_.end()) {
8212  data_->read_discriminator(value, disc_type, it);
8213  } else {
8214  return set_default_discriminator_value(value, disc_type);
8215  }
8216  }
8217  return true;
8218 }
const LogLevel::Value value
Definition: debug.cpp:61
bool read_discriminator(CORBA::Long &disc_val) const
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DynamicDataImpl(DDS::DynamicType_ptr type)
bool set_default_discriminator_value(CORBA::Long &value, const DDS::DynamicType_var &disc_type) const

◆ get_index_to_id_from_complex()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::get_index_to_id_from_complex ( IndexToIdMap &  index_to_id,
CORBA::ULong  bound 
) const

Definition at line 6169 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::MEMBER_ID_INVALID.

6171 {
6172  CORBA::ULong length = 0;
6173  if (!complex_map_.empty()) {
6174  CORBA::ULong largest_index;
6175  if (!get_largest_complex_index(largest_index)) {
6176  return false;
6177  }
6178  length = largest_index + 1;
6179  }
6180  index_to_id.resize(length, MEMBER_ID_INVALID);
6181  for (const_complex_iterator it = complex_map_.begin(); it != complex_map_.end(); ++it) {
6182  CORBA::ULong index;
6183  if (!data_->get_index_from_id(it->first, index, bound)) {
6184  return false;
6185  }
6186  index_to_id[index] = it->first;
6187  }
6188  return true;
6189 }
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
bool get_largest_complex_index(CORBA::ULong &index) const
ACE_CDR::ULong ULong
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const

◆ get_index_to_id_map()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::get_index_to_id_map ( IndexToIdMap &  index_to_id,
CORBA::ULong  bound 
) const

Definition at line 5702 of file DynamicDataImpl.cpp.

5704 {
5705  for (const_sequence_iterator it = sequence_map_.begin(); it != sequence_map_.end(); ++it) {
5706  CORBA::ULong index;
5707  if (!data_->get_index_from_id(it->first, index, bound)) {
5708  return false;
5709  }
5710  index_to_id[index] = it->first;
5711  }
5712  for (const_complex_iterator it = complex_map_.begin(); it != complex_map_.end(); ++it) {
5713  CORBA::ULong index;
5714  if (!data_->get_index_from_id(it->first, index, bound)) {
5715  return false;
5716  }
5717  index_to_id[index] = it->first;
5718  }
5719  return true;
5720 }
ACE_CDR::ULong ULong
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const

◆ get_largest_complex_index()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::get_largest_complex_index ( CORBA::ULong index) const

Definition at line 4074 of file DynamicDataImpl.cpp.

References DDS::RETCODE_OK, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, and OpenDDS::XTypes::DynamicDataBase::type_.

4075 {
4076  const TypeKind tk = type_->get_kind();
4077  if (tk != TK_STRING8 && tk != TK_STRING16 && tk != TK_SEQUENCE) {
4078  return false;
4079  }
4080  DDS::TypeDescriptor_var descriptor;
4081  if (type_->get_descriptor(descriptor) != DDS::RETCODE_OK) {
4082  return false;
4083  }
4084  const CORBA::ULong bound = descriptor->bound()[0];
4085  return data_->get_index_from_id(complex_map_.rbegin()->first, largest_index, bound);
4086 }
const ReturnCode_t RETCODE_OK
const TypeKind TK_STRING16
Definition: TypeObject.h:232
ACE_CDR::ULong ULong
const TypeKind TK_STRING8
Definition: TypeObject.h:231
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const

◆ get_largest_index_basic()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::get_largest_index_basic ( CORBA::ULong index) const

Definition at line 4088 of file DynamicDataImpl.cpp.

Referenced by OpenDDS::XTypes::DynamicDataImpl::get_item_count(), OpenDDS::XTypes::DynamicDataImpl::get_sequence_size(), and OpenDDS::XTypes::DynamicDataImpl::read_basic_value().

4089 {
4090  largest_index = 0;
4091  if (!single_map_.empty() && !get_largest_single_index(largest_index)) {
4092  return false;
4093  }
4094  if (!complex_map_.empty()) {
4095  CORBA::ULong index;
4096  if (!get_largest_complex_index(index)) {
4097  return false;
4098  }
4099  largest_index = std::max(index, largest_index);
4100  }
4101  return true;
4102 }
bool get_largest_complex_index(CORBA::ULong &index) const
ACE_CDR::ULong ULong
bool get_largest_single_index(CORBA::ULong &index) const

◆ get_largest_index_basic_sequence()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::get_largest_index_basic_sequence ( CORBA::ULong index) const

Definition at line 4104 of file DynamicDataImpl.cpp.

4105 {
4106  largest_index = 0;
4107  if (!sequence_map_.empty() && !get_largest_sequence_index(largest_index)) {
4108  return false;
4109  }
4110  if (!complex_map_.empty()) {
4111  CORBA::ULong index;
4112  if (!get_largest_complex_index(index)) {
4113  return false;
4114  }
4115  largest_index = std::max(index, largest_index);
4116  }
4117  return true;
4118 }
bool get_largest_complex_index(CORBA::ULong &index) const
ACE_CDR::ULong ULong
bool get_largest_sequence_index(CORBA::ULong &index) const

◆ get_largest_sequence_index()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::get_largest_sequence_index ( CORBA::ULong index) const

Definition at line 4060 of file DynamicDataImpl.cpp.

References DDS::RETCODE_OK, OpenDDS::XTypes::TK_SEQUENCE, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by OpenDDS::XTypes::DynamicDataImpl::get_sequence_size().

4061 {
4062  if (type_->get_kind() != TK_SEQUENCE) {
4063  return false;
4064  }
4065  DDS::TypeDescriptor_var descriptor;
4066  if (type_->get_descriptor(descriptor) != DDS::RETCODE_OK) {
4067  return false;
4068  }
4069  const CORBA::ULong bound = descriptor->bound()[0];
4070  return data_->get_index_from_id(sequence_map_.rbegin()->first, largest_index, bound);
4071 }
const ReturnCode_t RETCODE_OK
ACE_CDR::ULong ULong
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const

◆ get_largest_single_index()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::get_largest_single_index ( CORBA::ULong index) const

Definition at line 4041 of file DynamicDataImpl.cpp.

References DDS::RETCODE_OK, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, and OpenDDS::XTypes::DynamicDataBase::type_.

4042 {
4043  const TypeKind tk = type_->get_kind();
4044  if (tk != TK_STRING8 && tk != TK_STRING16 && tk != TK_SEQUENCE) {
4045  return false;
4046  }
4047  DDS::TypeDescriptor_var descriptor;
4048  if (type_->get_descriptor(descriptor) != DDS::RETCODE_OK) {
4049  return false;
4050  }
4051  const CORBA::ULong bound = descriptor->bound()[0];
4052 
4053  // Since ID is used as index in this implementation, the last element has largest index.
4054  // A different implementation (ID-to-index mapping) may need to iterate through all
4055  // stored elements to find the one with the largest index.
4056  return data_->get_index_from_id(single_map_.rbegin()->first, largest_index, bound);
4057 }
const ReturnCode_t RETCODE_OK
const TypeKind TK_STRING16
Definition: TypeObject.h:232
ACE_CDR::ULong ULong
const TypeKind TK_STRING8
Definition: TypeObject.h:231
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const

◆ OPENDDS_MAP() [1/3]

OpenDDS::XTypes::DynamicDataImpl::DataContainer::OPENDDS_MAP ( DDS::MemberId  ,
SingleValue   
)

◆ OPENDDS_MAP() [2/3]

OpenDDS::XTypes::DynamicDataImpl::DataContainer::OPENDDS_MAP ( DDS::MemberId  ,
SequenceValue   
)

◆ OPENDDS_MAP() [3/3]

OpenDDS::XTypes::DynamicDataImpl::DataContainer::OPENDDS_MAP ( DDS::MemberId  ,
DDS::DynamicData_var   
)

◆ reconstruct_bitmask_collection()

template<typename WrapElementType , typename CollectionType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::reconstruct_bitmask_collection ( CollectionType &  collection,
CORBA::ULong  size,
CORBA::ULong  bound,
const WrapElementType &  elem_tag 
) const

Definition at line 5367 of file DynamicDataImpl.cpp.

5369 {
5370  collection.length(size);
5371  set_default_bitmask_values(collection);
5372  return set_primitive_values(collection, bound, elem_tag);
5373 }
bool set_primitive_values(CollectionType &collection, CORBA::ULong bound, const ElementType &elem_tag) const
void set_default_bitmask_values(CollectionType &col) const

◆ reconstruct_enum_collection()

template<typename ElementType , typename WrapElementType , typename CollectionType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::reconstruct_enum_collection ( CollectionType &  collection,
CORBA::ULong  size,
CORBA::ULong  bound,
const DDS::DynamicType_var &  enum_type,
const WrapElementType &  elem_tag 
) const

Definition at line 5179 of file DynamicDataImpl.cpp.

5182 {
5183  collection.length(size);
5184  if (!set_default_enum_values<ElementType>(collection, enum_type)) {
5185  return false;
5186  }
5187  return set_primitive_values(collection, bound, elem_tag);
5188 }
bool set_primitive_values(CollectionType &collection, CORBA::ULong bound, const ElementType &elem_tag) const

◆ reconstruct_primitive_collection()

template<typename ElementType , typename CollectionType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::reconstruct_primitive_collection ( CollectionType &  collection,
CORBA::ULong  size,
CORBA::ULong  bound,
const ElementType &  elem_tag 
) const

Definition at line 4945 of file DynamicDataImpl.cpp.

4947 {
4948  collection.length(size);
4949  set_default_primitive_values(collection);
4950  return set_primitive_values(collection, bound, elem_tag);
4951 }
void set_default_primitive_values(DDS::Int8Seq &collection) const
bool set_primitive_values(CollectionType &collection, CORBA::ULong bound, const ElementType &elem_tag) const

◆ reconstruct_string_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::reconstruct_string_value ( CORBA::Char str) const

Definition at line 4287 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::container_, OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::RETCODE_OK, OpenDDS::XTypes::DynamicDataBase::type_, and ACE_OutputCDR::from_char::val_.

Referenced by OpenDDS::XTypes::DynamicDataImpl::read_basic_value().

4288 {
4289  DDS::TypeDescriptor_var descriptor;
4290  if (type_->get_descriptor(descriptor) != DDS::RETCODE_OK) {
4291  return false;
4292  }
4293  const CORBA::ULong bound = descriptor->bound()[0];
4294  for (const_single_iterator it = single_map_.begin(); it != single_map_.end(); ++it) {
4295  CORBA::ULong index;
4296  if (!data_->get_index_from_id(it->first, index, bound)) {
4297  return false;
4298  }
4299  str[index] = it->second.get<ACE_OutputCDR::from_char>().val_;
4300  }
4301  for (const_complex_iterator it = complex_map_.begin(); it != complex_map_.end(); ++it) {
4302  CORBA::ULong index;
4303  if (!data_->get_index_from_id(it->first, index, bound)) {
4304  return false;
4305  }
4306  // The DynamicData object for this character may not contain any data.
4307  // Use default value for character if it is the case.
4308  const DynamicDataImpl* elem_dd = dynamic_cast<const DynamicDataImpl*>(it->second.in());
4309  if (!elem_dd) {
4310  return false;
4311  }
4312  const_single_iterator elem_it = elem_dd->container_.single_map_.find(MEMBER_ID_INVALID);
4313  if (elem_it != elem_dd->container_.single_map_.end()) {
4314  str[index] = elem_it->second.get<ACE_OutputCDR::from_char>().val_;
4315  } else {
4316  ACE_OutputCDR::from_char from_char('\0');
4317  set_default_basic_value(from_char);
4318  str[index] = from_char.val_;
4319  }
4320  }
4321  return true;
4322 }
const ReturnCode_t RETCODE_OK
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
DynamicDataImpl(DDS::DynamicType_ptr type)
void set_default_basic_value(CORBA::Long &value) const
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const

◆ reconstruct_wstring_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::reconstruct_wstring_value ( CORBA::WChar wstr) const

◆ select_union_member()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::select_union_member ( CORBA::Long  disc_value,
bool &  found_selected_member,
DDS::MemberDescriptor_var &  selected_md 
) const

Definition at line 8381 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DISCRIMINATOR_ID, OpenDDS::XTypes::Sequence< T >::length(), DDS::RETCODE_OK, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by OpenDDS::XTypes::DynamicDataImpl::get_complex_from_union(), OpenDDS::XTypes::DynamicDataImpl::get_item_count(), and OpenDDS::XTypes::DynamicDataImpl::get_value_from_union().

8383 {
8384  found_selected_member = false;
8385  bool has_default = false;
8386  DDS::MemberDescriptor_var default_md;
8387  for (CORBA::ULong i = 0; i < type_->get_member_count(); ++i) {
8388  DDS::DynamicTypeMember_var dtm;
8389  if (type_->get_member_by_index(dtm, i) != DDS::RETCODE_OK) {
8390  return false;
8391  }
8392  if (dtm->get_id() == DISCRIMINATOR_ID) {
8393  continue;
8394  }
8395  DDS::MemberDescriptor_var md;
8396  if (dtm->get_descriptor(md) != DDS::RETCODE_OK) {
8397  return false;
8398  }
8399  bool found_matched_label = false;
8400  const DDS::UnionCaseLabelSeq labels = md->label();
8401  for (CORBA::ULong j = 0; !found_matched_label && j < labels.length(); ++j) {
8402  if (disc_value == labels[j]) {
8403  found_matched_label = true;
8404  }
8405  }
8406  if (found_matched_label) {
8407  selected_md = md;
8408  found_selected_member = true;
8409  break;
8410  }
8411  if (md->is_default_label()) {
8412  default_md = md;
8413  has_default = true;
8414  }
8415  }
8416  if (!found_selected_member && has_default) {
8417  selected_md = default_md;
8418  found_selected_member = true;
8419  }
8420  return true;
8421 }
const ReturnCode_t RETCODE_OK
const ACE_CDR::ULong DISCRIMINATOR_ID
Implementation specific sentinel for a union discriminator used in DynamicData.
Definition: TypeObject.h:913
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
ACE_CDR::ULong ULong

◆ serialize_array()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_array ( DCPS::Serializer ser,
DCPS::Sample::Extent  ext 
) const

Definition at line 7063 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataBase::bound_total(), OpenDDS::XTypes::get_base_type(), DDS::RETCODE_OK, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by OpenDDS::XTypes::DynamicDataImpl::serialize_i().

7064 {
7065  DDS::TypeDescriptor_var descriptor;
7066  if (type_->get_descriptor(descriptor) != DDS::RETCODE_OK) {
7067  return false;
7068  }
7069 
7070  const DDS::DynamicType_var elem_type = get_base_type(descriptor->element_type());
7071  const TypeKind elem_tk = elem_type->get_kind();
7072  DDS::TypeDescriptor_var elem_td;
7073  if (elem_type->get_descriptor(elem_td) != DDS::RETCODE_OK) {
7074  return false;
7075  }
7076 
7077  const CORBA::ULong length = bound_total(descriptor);
7078  if (data_->is_basic(elem_tk)) {
7079  return serialize_primitive_array(ser, elem_tk, length);
7080  } else if (elem_tk == TK_STRING8) {
7081  return serialize_generic_string_array<const char*>(ser, length);
7082  } else if (elem_tk == TK_STRING16) {
7083 #ifdef DDS_HAS_WCHAR
7084  return serialize_generic_string_array<const CORBA::WChar*>(ser, length);
7085 #else
7086  return false;
7087 #endif
7088  } else if (elem_tk == TK_ENUM) {
7089  const CORBA::ULong bit_bound = elem_td->bound()[0];
7090  return serialize_enum_array(ser, bit_bound, length, elem_type);
7091  } else if (elem_tk == TK_BITMASK) {
7092  const CORBA::ULong bit_bound = elem_td->bound()[0];
7093  return serialize_bitmask_array(ser, bit_bound, length);
7094  } else if (elem_tk == TK_SEQUENCE) {
7095  const DDS::DynamicType_var nested_elem_type = get_base_type(elem_td->element_type());
7096  const TypeKind nested_elem_tk = nested_elem_type->get_kind();
7097  if (data_->is_basic(nested_elem_tk)) {
7098  return serialize_nesting_basic_array(ser, nested_elem_tk, length);
7099  } else if (nested_elem_tk == TK_ENUM) {
7100  return serialize_nesting_enum_array(ser, length);
7101  } else if (nested_elem_tk == TK_BITMASK) {
7102  return serialize_nesting_bitmask_array(ser, length);
7103  }
7104  }
7105  return serialize_complex_array(ser, length, elem_type, ext);
7106 }
const ReturnCode_t RETCODE_OK
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
bool serialize_nesting_basic_array(DCPS::Serializer &ser, TypeKind nested_elem_tk, CORBA::ULong length) const
const TypeKind TK_STRING16
Definition: TypeObject.h:232
bool serialize_enum_array(DCPS::Serializer &ser, CORBA::ULong bitbound, CORBA::ULong length, const DDS::DynamicType_var &enum_type) const
static CORBA::ULong bound_total(DDS::TypeDescriptor_var descriptor)
ACE_CDR::ULong ULong
bool serialize_primitive_array(DCPS::Serializer &ser, TypeKind elem_tk, CORBA::ULong length) const
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
bool serialize_bitmask_array(DCPS::Serializer &ser, CORBA::ULong bitbound, CORBA::ULong length) const
const TypeKind TK_STRING8
Definition: TypeObject.h:231
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
const TypeKind TK_ENUM
Definition: TypeObject.h:238
bool serialize_nesting_enum_array(DCPS::Serializer &ser, CORBA::ULong length) const
bool serialize_nesting_bitmask_array(DCPS::Serializer &ser, CORBA::ULong length) const
bool serialize_complex_array(DCPS::Serializer &ser, CORBA::ULong length, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const
bool is_basic(TypeKind tk) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210

◆ serialize_basic_member_default_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_basic_member_default_value ( DCPS::Serializer ser,
TypeKind  member_tk 
) const

Definition at line 7191 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, OpenDDS::XTypes::TK_UINT8, and value.

7193 {
7194  switch (member_tk) {
7195  case TK_INT32: {
7197  set_default_basic_value(value);
7198  return ser << value;
7199  }
7200  case TK_UINT32: {
7202  set_default_basic_value(value);
7203  return ser << value;
7204  }
7205  case TK_INT8: {
7208  return ser << value;
7209  }
7210  case TK_UINT8: {
7213  return ser << value;
7214  }
7215  case TK_INT16: {
7217  set_default_basic_value(value);
7218  return ser << value;
7219  }
7220  case TK_UINT16: {
7222  set_default_basic_value(value);
7223  return ser << value;
7224  }
7225  case TK_INT64: {
7227  set_default_basic_value(value);
7228  return ser << value;
7229  }
7230  case TK_UINT64: {
7232  set_default_basic_value(value);
7233  return ser << value;
7234  }
7235  case TK_FLOAT32: {
7237  set_default_basic_value(value);
7238  return ser << value;
7239  }
7240  case TK_FLOAT64: {
7242  set_default_basic_value(value);
7243  return ser << value;
7244  }
7245  case TK_FLOAT128: {
7247  set_default_basic_value(value);
7248  return ser << value;
7249  }
7250  case TK_CHAR8: {
7253  return ser << value;
7254  }
7255  case TK_STRING8: {
7256  const char* value;
7257  set_default_basic_value(value);
7258  return ser << value;
7259  }
7260 #ifdef DDS_HAS_WCHAR
7261  case TK_CHAR16: {
7264  return ser << value;
7265  }
7266  case TK_STRING16: {
7267  const CORBA::WChar* value;
7268  set_default_basic_value(value);
7269  return ser << value;
7270  }
7271 #endif
7272  case TK_BYTE: {
7275  return ser << value;
7276  }
7277  case TK_BOOLEAN: {
7280  return ser << value;
7281  }
7282  }
7283  return false;
7284 }
ACE_CDR::Long Long
const TypeKind TK_INT8
Definition: TypeObject.h:225
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
ACE_CDR::LongLong LongLong
ACE_CDR::Short Short
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const TypeKind TK_STRING16
Definition: TypeObject.h:232
ACE_CDR::ULongLong ULongLong
const TypeKind TK_UINT16
Definition: TypeObject.h:219
ACE_CDR::ULong ULong
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const TypeKind TK_INT16
Definition: TypeObject.h:216
ACE_CDR::UShort UShort
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_STRING8
Definition: TypeObject.h:231
void set_default_basic_value(CORBA::Long &value) const
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
ACE_CDR::WChar WChar

◆ serialize_basic_sequence()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_basic_sequence ( DCPS::Serializer ser,
const_sequence_iterator  it 
) const

Definition at line 7630 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

7632 {
7633  switch (it->second.elem_kind_) {
7634  case TK_INT32: {
7635  const DDS::Int32Seq& seq = it->second.get<DDS::Int32Seq>();
7636  return ser << seq;
7637  }
7638  case TK_UINT32: {
7639  const DDS::UInt32Seq& seq = it->second.get<DDS::UInt32Seq>();
7640  return ser << seq;
7641  }
7642  case TK_INT8: {
7643  const DDS::Int8Seq& seq = it->second.get<DDS::Int8Seq>();
7644  return ser << seq;
7645  }
7646  case TK_UINT8: {
7647  const DDS::UInt8Seq& seq = it->second.get<DDS::UInt8Seq>();
7648  return ser << seq;
7649  }
7650  case TK_INT16: {
7651  const DDS::Int16Seq& seq = it->second.get<DDS::Int16Seq>();
7652  return ser << seq;
7653  }
7654  case TK_UINT16: {
7655  const DDS::UInt16Seq& seq = it->second.get<DDS::UInt16Seq>();
7656  return ser << seq;
7657  }
7658  case TK_INT64: {
7659  const DDS::Int64Seq& seq = it->second.get<DDS::Int64Seq>();
7660  return ser << seq;
7661  }
7662  case TK_UINT64: {
7663  const DDS::UInt64Seq& seq = it->second.get<DDS::UInt64Seq>();
7664  return ser << seq;
7665  }
7666  case TK_FLOAT32: {
7667  const DDS::Float32Seq& seq = it->second.get<DDS::Float32Seq>();
7668  return ser << seq;
7669  }
7670  case TK_FLOAT64: {
7671  const DDS::Float64Seq& seq = it->second.get<DDS::Float64Seq>();
7672  return ser << seq;
7673  }
7674  case TK_FLOAT128: {
7675  const DDS::Float128Seq& seq = it->second.get<DDS::Float128Seq>();
7676  return ser << seq;
7677  }
7678  case TK_CHAR8: {
7679  const DDS::CharSeq& seq = it->second.get<DDS::CharSeq>();
7680  return ser << seq;
7681  }
7682  case TK_BYTE: {
7683  const DDS::ByteSeq& seq = it->second.get<DDS::ByteSeq>();
7684  return ser << seq;
7685  }
7686  case TK_BOOLEAN: {
7687  const DDS::BooleanSeq& seq = it->second.get<DDS::BooleanSeq>();
7688  return ser << seq;
7689  }
7690  case TK_STRING8: {
7691  const DDS::StringSeq& seq = it->second.get<DDS::StringSeq>();
7692  return ser << seq;
7693  }
7694 #ifdef DDS_HAS_WCHAR
7695  case TK_CHAR16: {
7696  const DDS::WcharSeq& seq = it->second.get<DDS::WcharSeq>();
7697  return ser << seq;
7698  }
7699  case TK_STRING16: {
7700  const DDS::WstringSeq& seq = it->second.get<DDS::WstringSeq>();
7701  return ser << seq;
7702  }
7703 #endif
7704  }
7705  return false;
7706 }
sequence< char > CharSeq
const TypeKind TK_INT8
Definition: TypeObject.h:225
sequence< unsigned long > UInt32Seq
sequence< unsigned long long > UInt64Seq
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
sequence< float > Float32Seq
sequence< boolean > BooleanSeq
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
sequence< wchar > WcharSeq
sequence< long long > Int64Seq
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const TypeKind TK_STRING16
Definition: TypeObject.h:232
sequence< string > StringSeq
Definition: DdsDcpsCore.idl:50
sequence< uint8 > UInt8Seq
const TypeKind TK_UINT16
Definition: TypeObject.h:219
sequence< double > Float64Seq
sequence< short > Int16Seq
sequence< long double > Float128Seq
const TypeKind TK_INT64
Definition: TypeObject.h:218
sequence< long > Int32Seq
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
sequence< wstring > WstringSeq
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
sequence< int8 > Int8Seq
const TypeKind TK_INT16
Definition: TypeObject.h:216
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_STRING8
Definition: TypeObject.h:231
sequence< unsigned short > UInt16Seq
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
sequence< octet > ByteSeq

◆ serialize_basic_struct_member_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_basic_struct_member_xcdr2 ( DCPS::Serializer ser,
DDS::MemberId  id,
const DDS::DynamicType_var &  member_type,
bool  optional,
bool  must_understand,
DDS::ExtensibilityKind  extensibility 
) const

Definition at line 7463 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, OpenDDS::DCPS::Serializer::encoding(), DDS::FINAL, OpenDDS::DCPS::Sample::Full, DDS::MUTABLE, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_ENUM, and OpenDDS::DCPS::Serializer::write_parameter_id().

7466 {
7467  const TypeKind member_tk = member_type->get_kind();
7468  const DCPS::Encoding& encoding = ser.encoding();
7469  const_single_iterator single_it = single_map_.find(id);
7470  const_complex_iterator complex_it = complex_map_.find(id);
7471  if (single_it == single_map_.end() && complex_it == complex_map_.end()) {
7472  if (optional) {
7474  return ser << ACE_OutputCDR::from_boolean(false);
7475  }
7476  return true;
7477  }
7478  if (extensibility == DDS::MUTABLE) {
7479  size_t member_size = 0;
7480  if (data_->is_basic(member_tk)) {
7481  serialized_size_basic_member_default_value(encoding, member_size, member_tk);
7482  } else if (member_tk == TK_ENUM) {
7483  serialized_size_enum(encoding, member_size, member_type);
7484  } else if (member_tk == TK_BITMASK) {
7485  serialized_size_bitmask(encoding, member_size, member_type);
7486  } else {
7487  return false;
7488  }
7489  if (!ser.write_parameter_id(id, member_size, must_understand)) {
7490  return false;
7491  }
7492  }
7493  if (data_->is_basic(member_tk)) {
7494  return serialize_basic_member_default_value(ser, member_tk);
7495  } else if (member_tk == TK_ENUM) {
7496  return serialize_enum_default_value(ser, member_type);
7497  } else if (member_tk == TK_BITMASK) {
7498  return serialize_bitmask_default_value(ser, member_type);
7499  }
7500  return false;
7501  }
7502 
7503  if (single_it != single_map_.end()) {
7504  return serialize_single_aggregated_member_xcdr2(ser, single_it, member_type, optional,
7505  must_understand, extensibility);
7506  }
7507  return serialize_complex_aggregated_member_xcdr2(ser, complex_it, optional,
7508  must_understand, extensibility,
7510 }
bool serialize_basic_member_default_value(DCPS::Serializer &ser, TypeKind member_tk) const
bool serialized_size_basic_member_default_value(const DCPS::Encoding &encoding, size_t &size, TypeKind member_tk) const
bool serialized_size_enum(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &enum_type) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
bool serialize_bitmask_default_value(DCPS::Serializer &ser, const DDS::DynamicType_var &bitmask_type) const
bool serialized_size_bitmask(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &bitmask_type) const
const TypeKind TK_ENUM
Definition: TypeObject.h:238
bool serialize_complex_aggregated_member_xcdr2(DCPS::Serializer &ser, const_complex_iterator it, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility, DCPS::Sample::Extent ext) const
bool serialize_single_aggregated_member_xcdr2(DCPS::Serializer &ser, const_single_iterator it, const DDS::DynamicType_var &member_type, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility) const
bool serialize_enum_default_value(DCPS::Serializer &ser, const DDS::DynamicType_var &enum_type) const
bool is_basic(TypeKind tk) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialize_bitmask_array()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_array ( DCPS::Serializer ser,
CORBA::ULong  bitbound,
CORBA::ULong  length 
) const

Definition at line 6775 of file DynamicDataImpl.cpp.

6777 {
6778  if (bitbound >= 1 && bitbound <= 8) {
6779  return serialize_bitmask_array_as_uint8s(ser, length);
6780  } else if (bitbound >= 9 && bitbound <= 16) {
6781  return serialize_bitmask_array_as_uint16s(ser, length);
6782  } else if (bitbound >= 17 && bitbound <= 32) {
6783  return serialize_bitmask_array_as_uint32s(ser, length);
6784  } else if (bitbound >= 33 && bitbound <= 64) {
6785  return serialize_bitmask_array_as_uint64s(ser, length);
6786  }
6787  return false;
6788 }
bool serialize_bitmask_array_as_uint16s(DCPS::Serializer &ser, CORBA::ULong length) const
bool serialize_bitmask_array_as_uint64s(DCPS::Serializer &ser, CORBA::ULong length) const
bool serialize_bitmask_array_as_uint32s(DCPS::Serializer &ser, CORBA::ULong length) const
bool serialize_bitmask_array_as_uint8s(DCPS::Serializer &ser, CORBA::ULong length) const

◆ serialize_bitmask_array_as_uint16s()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_array_as_uint16s ( DCPS::Serializer ser,
CORBA::ULong  length 
) const

Definition at line 6693 of file DynamicDataImpl.cpp.

6695 {
6696  DDS::UInt16Seq bitmask_arr;
6697  return reconstruct_bitmask_collection(bitmask_arr, length, length, CORBA::UShort()) &&
6698  serialize_bitmask_array_as_uints_i(ser, bitmask_arr);
6699 }
bool serialize_bitmask_array_as_uints_i(DCPS::Serializer &ser, const DDS::UInt8Seq &bitmask_arr) const
ACE_CDR::UShort UShort
sequence< unsigned short > UInt16Seq
bool reconstruct_bitmask_collection(CollectionType &collection, CORBA::ULong size, CORBA::ULong bound, const WrapElementType &elem_tag) const

◆ serialize_bitmask_array_as_uint32s()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_array_as_uint32s ( DCPS::Serializer ser,
CORBA::ULong  length 
) const

Definition at line 6723 of file DynamicDataImpl.cpp.

6725 {
6726  DDS::UInt32Seq bitmask_arr;
6727  return reconstruct_bitmask_collection(bitmask_arr, length, length, CORBA::ULong()) &&
6728  serialize_bitmask_array_as_uints_i(ser, bitmask_arr);
6729 }
sequence< unsigned long > UInt32Seq
ACE_CDR::ULong ULong
bool serialize_bitmask_array_as_uints_i(DCPS::Serializer &ser, const DDS::UInt8Seq &bitmask_arr) const
bool reconstruct_bitmask_collection(CollectionType &collection, CORBA::ULong size, CORBA::ULong bound, const WrapElementType &elem_tag) const

◆ serialize_bitmask_array_as_uint64s()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_array_as_uint64s ( DCPS::Serializer ser,
CORBA::ULong  length 
) const

Definition at line 6753 of file DynamicDataImpl.cpp.

6755 {
6756  DDS::UInt64Seq bitmask_arr;
6757  return reconstruct_bitmask_collection(bitmask_arr, length, length, CORBA::ULongLong()) &&
6758  serialize_bitmask_array_as_uints_i(ser, bitmask_arr);
6759 }
sequence< unsigned long long > UInt64Seq
ACE_CDR::ULongLong ULongLong
bool serialize_bitmask_array_as_uints_i(DCPS::Serializer &ser, const DDS::UInt8Seq &bitmask_arr) const
bool reconstruct_bitmask_collection(CollectionType &collection, CORBA::ULong size, CORBA::ULong bound, const WrapElementType &elem_tag) const

◆ serialize_bitmask_array_as_uint8s()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_array_as_uint8s ( DCPS::Serializer ser,
CORBA::ULong  length 
) const

Definition at line 6663 of file DynamicDataImpl.cpp.

6665 {
6666  DDS::UInt8Seq bitmask_arr;
6667  return reconstruct_bitmask_collection(bitmask_arr, length, length, ACE_OutputCDR::from_uint8(0)) &&
6668  serialize_bitmask_array_as_uints_i(ser, bitmask_arr);
6669 }
sequence< uint8 > UInt8Seq
bool serialize_bitmask_array_as_uints_i(DCPS::Serializer &ser, const DDS::UInt8Seq &bitmask_arr) const
bool reconstruct_bitmask_collection(CollectionType &collection, CORBA::ULong size, CORBA::ULong bound, const WrapElementType &elem_tag) const

◆ serialize_bitmask_array_as_uints_i() [1/4]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_array_as_uints_i ( DCPS::Serializer ser,
const DDS::UInt8Seq bitmask_arr 
) const

Definition at line 6649 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6651 {
6652  const DCPS::Encoding& encoding = ser.encoding();
6653  size_t total_size = 0;
6654  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6655  serialized_size_bitmask_array_as_uint8s(encoding, total_size, bitmask_arr.length());
6656  if (!ser.write_delimiter(total_size)) {
6657  return false;
6658  }
6659  }
6660  return ser.write_uint8_array(bitmask_arr.get_buffer(), bitmask_arr.length());
6661 }
void serialized_size_bitmask_array_as_uint8s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)

◆ serialize_bitmask_array_as_uints_i() [2/4]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_array_as_uints_i ( DCPS::Serializer ser,
const DDS::UInt16Seq bitmask_arr 
) const

Definition at line 6679 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Serializer::write_ushort_array(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6681 {
6682  const DCPS::Encoding& encoding = ser.encoding();
6683  size_t total_size = 0;
6684  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6685  serialized_size_bitmask_array_as_uint16s(encoding, total_size, bitmask_arr.length());
6686  if (!ser.write_delimiter(total_size)) {
6687  return false;
6688  }
6689  }
6690  return ser.write_ushort_array(bitmask_arr.get_buffer(), bitmask_arr.length());
6691 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_bitmask_array_as_uint16s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialize_bitmask_array_as_uints_i() [3/4]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_array_as_uints_i ( DCPS::Serializer ser,
const DDS::UInt32Seq bitmask_arr 
) const

Definition at line 6709 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Serializer::write_ulong_array(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6711 {
6712  const DCPS::Encoding& encoding = ser.encoding();
6713  size_t total_size = 0;
6714  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6715  serialized_size_bitmask_array_as_uint32s(encoding, total_size, bitmask_arr.length());
6716  if (!ser.write_delimiter(total_size)) {
6717  return false;
6718  }
6719  }
6720  return ser.write_ulong_array(bitmask_arr.get_buffer(), bitmask_arr.length());
6721 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_bitmask_array_as_uint32s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialize_bitmask_array_as_uints_i() [4/4]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_array_as_uints_i ( DCPS::Serializer ser,
const DDS::UInt64Seq bitmask_arr 
) const

Definition at line 6739 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Serializer::write_ulonglong_array(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6741 {
6742  const DCPS::Encoding& encoding = ser.encoding();
6743  size_t total_size = 0;
6744  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6745  serialized_size_bitmask_array_as_uint64s(encoding, total_size, bitmask_arr.length());
6746  if (!ser.write_delimiter(total_size)) {
6747  return false;
6748  }
6749  }
6750  return ser.write_ulonglong_array(bitmask_arr.get_buffer(), bitmask_arr.length());
6751 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_bitmask_array_as_uint64s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialize_bitmask_default_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_default_value ( DCPS::Serializer ser,
const DDS::DynamicType_var &  bitmask_type 
) const

Definition at line 4256 of file DynamicDataImpl.cpp.

References DDS::RETCODE_OK.

4258 {
4259  DDS::TypeDescriptor_var descriptor;
4260  if (bitmask_type->get_descriptor(descriptor) != DDS::RETCODE_OK) {
4261  return false;
4262  }
4263  const CORBA::ULong bit_bound = descriptor->bound()[0];
4264 
4265  // Table 9 doesn't mention default value for bitmask. Use 0 as default here.
4266  if (bit_bound >= 1 && bit_bound <= 8) {
4267  return ser << static_cast<CORBA::UInt8>(0);
4268  } else if (bit_bound >= 9 && bit_bound <= 16) {
4269  return ser << static_cast<CORBA::UShort>(0);
4270  } else if (bit_bound >= 17 && bit_bound <= 32) {
4271  return ser << static_cast<CORBA::ULong>(0);
4272  } else if (bit_bound >= 33 && bit_bound <= 64) {
4273  return ser << static_cast<CORBA::ULongLong>(0);
4274  }
4275  return false;
4276 }
const ReturnCode_t RETCODE_OK
ACE_CDR::ULong ULong

◆ serialize_bitmask_sequence() [1/2]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_sequence ( DCPS::Serializer ser,
CORBA::ULong  size,
CORBA::ULong  bitbound,
CORBA::ULong  seqbound 
) const

Definition at line 5577 of file DynamicDataImpl.cpp.

5579 {
5580  if (bitbound >= 1 && bitbound <= 8) {
5581  return serialize_bitmask_sequence_as_uint8s(ser, size, seqbound);
5582  } else if (bitbound >= 9 && bitbound <= 16) {
5583  return serialize_bitmask_sequence_as_uint16s(ser, size, seqbound);
5584  } else if (bitbound >= 17 && bitbound <= 32) {
5585  return serialize_bitmask_sequence_as_uint32s(ser, size, seqbound);
5586  } else if (bitbound >= 33 && bitbound <= 64) {
5587  return serialize_bitmask_sequence_as_uint64s(ser, size, seqbound);
5588  }
5589  return false;
5590 }
bool serialize_bitmask_sequence_as_uint16s(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound) const
bool serialize_bitmask_sequence_as_uint64s(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound) const
bool serialize_bitmask_sequence_as_uint8s(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound) const
bool serialize_bitmask_sequence_as_uint32s(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound) const

◆ serialize_bitmask_sequence() [2/2]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_sequence ( DCPS::Serializer ser,
const_sequence_iterator  it 
) const

Definition at line 7779 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

7781 {
7782  switch (it->second.elem_kind_) {
7783  case TK_UINT8: {
7784  const DDS::UInt8Seq& seq = it->second.get<DDS::UInt8Seq>();
7785  return serialize_bitmask_sequence_as_uints_i(ser, seq);
7786  }
7787  case TK_UINT16: {
7788  const DDS::UInt16Seq& seq = it->second.get<DDS::UInt16Seq>();
7789  return serialize_bitmask_sequence_as_uints_i(ser, seq);
7790  }
7791  case TK_UINT32: {
7792  const DDS::UInt32Seq& seq = it->second.get<DDS::UInt32Seq>();
7793  return serialize_bitmask_sequence_as_uints_i(ser, seq);
7794  }
7795  case TK_UINT64: {
7796  const DDS::UInt64Seq& seq = it->second.get<DDS::UInt64Seq>();
7797  return serialize_bitmask_sequence_as_uints_i(ser, seq);
7798  }
7799  }
7800  return false;
7801 }
sequence< unsigned long > UInt32Seq
sequence< unsigned long long > UInt64Seq
sequence< uint8 > UInt8Seq
const TypeKind TK_UINT16
Definition: TypeObject.h:219
bool serialize_bitmask_sequence_as_uints_i(DCPS::Serializer &ser, const DDS::UInt8Seq &bitmask_seq) const
const TypeKind TK_UINT8
Definition: TypeObject.h:226
sequence< unsigned short > UInt16Seq
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_UINT64
Definition: TypeObject.h:221

◆ serialize_bitmask_sequence_as_uint16s()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_sequence_as_uint16s ( DCPS::Serializer ser,
CORBA::ULong  size,
CORBA::ULong  bound 
) const

Definition at line 5461 of file DynamicDataImpl.cpp.

5463 {
5464  DDS::UInt16Seq bitmask_seq;
5465  return reconstruct_bitmask_collection(bitmask_seq, size, bound, CORBA::UShort()) &&
5466  serialize_bitmask_sequence_as_uints_i(ser, bitmask_seq);
5467 }
bool serialize_bitmask_sequence_as_uints_i(DCPS::Serializer &ser, const DDS::UInt8Seq &bitmask_seq) const
ACE_CDR::UShort UShort
sequence< unsigned short > UInt16Seq
bool reconstruct_bitmask_collection(CollectionType &collection, CORBA::ULong size, CORBA::ULong bound, const WrapElementType &elem_tag) const

◆ serialize_bitmask_sequence_as_uint32s()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_sequence_as_uint32s ( DCPS::Serializer ser,
CORBA::ULong  size,
CORBA::ULong  bound 
) const

Definition at line 5508 of file DynamicDataImpl.cpp.

5510 {
5511  DDS::UInt32Seq bitmask_seq;
5512  return reconstruct_bitmask_collection(bitmask_seq, size, bound, CORBA::ULong()) &&
5513  serialize_bitmask_sequence_as_uints_i(ser, bitmask_seq);
5514 }
sequence< unsigned long > UInt32Seq
ACE_CDR::ULong ULong
bool serialize_bitmask_sequence_as_uints_i(DCPS::Serializer &ser, const DDS::UInt8Seq &bitmask_seq) const
bool reconstruct_bitmask_collection(CollectionType &collection, CORBA::ULong size, CORBA::ULong bound, const WrapElementType &elem_tag) const

◆ serialize_bitmask_sequence_as_uint64s()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_sequence_as_uint64s ( DCPS::Serializer ser,
CORBA::ULong  size,
CORBA::ULong  bound 
) const

Definition at line 5555 of file DynamicDataImpl.cpp.

5557 {
5558  DDS::UInt64Seq bitmask_seq;
5559  return reconstruct_bitmask_collection(bitmask_seq, size, bound, CORBA::ULongLong()) &&
5560  serialize_bitmask_sequence_as_uints_i(ser, bitmask_seq);
5561 }
sequence< unsigned long long > UInt64Seq
ACE_CDR::ULongLong ULongLong
bool serialize_bitmask_sequence_as_uints_i(DCPS::Serializer &ser, const DDS::UInt8Seq &bitmask_seq) const
bool reconstruct_bitmask_collection(CollectionType &collection, CORBA::ULong size, CORBA::ULong bound, const WrapElementType &elem_tag) const

◆ serialize_bitmask_sequence_as_uint8s()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_sequence_as_uint8s ( DCPS::Serializer ser,
CORBA::ULong  size,
CORBA::ULong  bound 
) const

Definition at line 5414 of file DynamicDataImpl.cpp.

5416 {
5417  DDS::UInt8Seq bitmask_seq;
5418  return reconstruct_bitmask_collection(bitmask_seq, size, bound, ACE_OutputCDR::from_uint8(0)) &&
5419  serialize_bitmask_sequence_as_uints_i(ser, bitmask_seq);
5420 }
sequence< uint8 > UInt8Seq
bool serialize_bitmask_sequence_as_uints_i(DCPS::Serializer &ser, const DDS::UInt8Seq &bitmask_seq) const
bool reconstruct_bitmask_collection(CollectionType &collection, CORBA::ULong size, CORBA::ULong bound, const WrapElementType &elem_tag) const

◆ serialize_bitmask_sequence_as_uints_i() [1/4]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_sequence_as_uints_i ( DCPS::Serializer ser,
const DDS::UInt8Seq bitmask_seq 
) const

Definition at line 5393 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

5395 {
5396  const DCPS::Encoding& encoding = ser.encoding();
5397  size_t total_size = 0;
5398  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
5399  serialized_size_bitmask_sequence(encoding, total_size, bitmask_seq);
5400  if (!ser.write_delimiter(total_size)) {
5401  return false;
5402  }
5403  }
5404  const CORBA::ULong length = bitmask_seq.length();
5405  if (!(ser << length)) {
5406  return false;
5407  }
5408  if (length == 0) {
5409  return true;
5410  }
5411  return ser.write_uint8_array(bitmask_seq.get_buffer(), length);
5412 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULong ULong
void serialized_size_bitmask_sequence(const DCPS::Encoding &encoding, size_t &size, const DDS::UInt8Seq &seq) const

◆ serialize_bitmask_sequence_as_uints_i() [2/4]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_sequence_as_uints_i ( DCPS::Serializer ser,
const DDS::UInt16Seq bitmask_seq 
) const

Definition at line 5440 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Serializer::write_ushort_array(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

5442 {
5443  const DCPS::Encoding& encoding = ser.encoding();
5444  size_t total_size = 0;
5445  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
5446  serialized_size_bitmask_sequence(encoding, total_size, bitmask_seq);
5447  if (!ser.write_delimiter(total_size)) {
5448  return false;
5449  }
5450  }
5451  const CORBA::ULong length = bitmask_seq.length();
5452  if (!(ser << length)) {
5453  return false;
5454  }
5455  if (length == 0) {
5456  return true;
5457  }
5458  return ser.write_ushort_array(bitmask_seq.get_buffer(), length);
5459 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULong ULong
void serialized_size_bitmask_sequence(const DCPS::Encoding &encoding, size_t &size, const DDS::UInt8Seq &seq) const

◆ serialize_bitmask_sequence_as_uints_i() [3/4]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_sequence_as_uints_i ( DCPS::Serializer ser,
const DDS::UInt32Seq bitmask_seq 
) const

Definition at line 5487 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Serializer::write_ulong_array(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

5489 {
5490  const DCPS::Encoding& encoding = ser.encoding();
5491  size_t total_size = 0;
5492  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
5493  serialized_size_bitmask_sequence(encoding, total_size, bitmask_seq);
5494  if (!ser.write_delimiter(total_size)) {
5495  return false;
5496  }
5497  }
5498  const CORBA::ULong length = bitmask_seq.length();
5499  if (!(ser << length)) {
5500  return false;
5501  }
5502  if (length == 0) {
5503  return true;
5504  }
5505  return ser.write_ulong_array(bitmask_seq.get_buffer(), length);
5506 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULong ULong
void serialized_size_bitmask_sequence(const DCPS::Encoding &encoding, size_t &size, const DDS::UInt8Seq &seq) const

◆ serialize_bitmask_sequence_as_uints_i() [4/4]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_sequence_as_uints_i ( DCPS::Serializer ser,
const DDS::UInt64Seq bitmask_seq 
) const

Definition at line 5534 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Serializer::write_ulonglong_array(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

5536 {
5537  const DCPS::Encoding& encoding = ser.encoding();
5538  size_t total_size = 0;
5539  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
5540  serialized_size_bitmask_sequence(encoding, total_size, bitmask_seq);
5541  if (!ser.write_delimiter(total_size)) {
5542  return false;
5543  }
5544  }
5545  const CORBA::ULong length = bitmask_seq.length();
5546  if (!(ser << length)) {
5547  return false;
5548  }
5549  if (length == 0) {
5550  return true;
5551  }
5552  return ser.write_ulonglong_array(bitmask_seq.get_buffer(), length);
5553 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULong ULong
void serialized_size_bitmask_sequence(const DCPS::Encoding &encoding, size_t &size, const DDS::UInt8Seq &seq) const

◆ serialize_bitmask_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_value ( DCPS::Serializer ser) const

Definition at line 4278 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::MEMBER_ID_INVALID, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by OpenDDS::XTypes::DynamicDataImpl::serialize_i().

4279 {
4280  const_single_iterator it = single_map_.find(MEMBER_ID_INVALID);
4281  if (it != single_map_.end()) {
4282  return serialize_single_value(ser, it->second);
4283  }
4285 }
bool serialize_single_value(DCPS::Serializer &ser, const SingleValue &sv) const
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
bool serialize_bitmask_default_value(DCPS::Serializer &ser, const DDS::DynamicType_var &bitmask_type) const

◆ serialize_complex_aggregated_member_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_complex_aggregated_member_xcdr2 ( DCPS::Serializer ser,
const_complex_iterator  it,
bool  optional,
bool  must_understand,
DDS::ExtensibilityKind  extensibility,
DCPS::Sample::Extent  ext 
) const

Definition at line 7401 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, OpenDDS::DCPS::Serializer::encoding(), DDS::FINAL, DDS::MUTABLE, OpenDDS::XTypes::DynamicDataImpl::serialize_i(), OpenDDS::XTypes::DynamicDataImpl::serialized_size_i(), and OpenDDS::DCPS::Serializer::write_parameter_id().

7404 {
7405  const DDS::DynamicData_var& data_var = it->second;
7406  const DynamicDataImpl* data_impl = dynamic_cast<DynamicDataImpl*>(data_var.in());
7407  if (!data_impl) {
7408  return false;
7409  }
7410 
7411  if (optional && (extensibility == DDS::FINAL || extensibility == DDS::APPENDABLE)) {
7412  if (!(ser << ACE_OutputCDR::from_boolean(true))) {
7413  return false;
7414  }
7415  } else if (extensibility == DDS::MUTABLE) {
7416  size_t member_size = 0;
7417  if (!data_impl->serialized_size_i(ser.encoding(), member_size, ext) ||
7418  !ser.write_parameter_id(it->first, member_size, must_understand)) {
7419  return false;
7420  }
7421  }
7422  return data_impl->serialize_i(ser, ext);
7423 }
DynamicDataImpl(DDS::DynamicType_ptr type)
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialize_complex_aggregated_member_xcdr2_default()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_complex_aggregated_member_xcdr2_default ( DCPS::Serializer ser,
DDS::MemberId  id,
const DDS::DynamicType_var &  member_type,
bool  optional,
bool  must_understand,
DDS::ExtensibilityKind  extensibility,
DCPS::Sample::Extent  ext 
) const

Definition at line 7357 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, OpenDDS::DCPS::Serializer::encoding(), DDS::FINAL, DDS::MUTABLE, OpenDDS::XTypes::DynamicDataImpl::serialize_i(), OpenDDS::XTypes::DynamicDataImpl::serialized_size_i(), and OpenDDS::DCPS::Serializer::write_parameter_id().

7361 {
7362  if (optional) {
7364  return ser << ACE_OutputCDR::from_boolean(false);
7365  }
7366  return true;
7367  }
7368  // Use default value if the member is not optional.
7369  const DynamicDataImpl default_value(member_type);
7370  if (extensibility == DDS::MUTABLE) {
7371  size_t member_size = 0;
7372  default_value.serialized_size_i(ser.encoding(), member_size, ext);
7373  if (!ser.write_parameter_id(id, member_size, must_understand)) {
7374  return false;
7375  }
7376  }
7377  return default_value.serialize_i(ser, ext);
7378 }
DynamicDataImpl(DDS::DynamicType_ptr type)
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialize_complex_array()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_complex_array ( DCPS::Serializer ser,
CORBA::ULong  length,
const DDS::DynamicType_var &  elem_type,
DCPS::Sample::Extent  ext 
) const

Definition at line 6972 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6974 {
6975  IndexToIdMap index_to_id(length, MEMBER_ID_INVALID);
6976  for (const_complex_iterator it = complex_map_.begin(); it != complex_map_.end(); ++it) {
6977  CORBA::ULong index;
6978  if (!data_->get_index_from_id(it->first, index, length)) {
6979  return false;
6980  }
6981  index_to_id[index] = it->first;
6982  }
6983 
6984  const DCPS::Encoding& encoding = ser.encoding();
6985  size_t total_size = 0;
6986  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6987  if (!serialized_size_complex_array(encoding, total_size, index_to_id, elem_type, ext) ||
6988  !ser.write_delimiter(total_size)) {
6989  return false;
6990  }
6991  }
6992  return serialize_complex_sequence_i(ser, index_to_id, elem_type, ext);
6993 }
bool serialize_complex_sequence_i(DCPS::Serializer &ser, const IndexToIdMap &index_to_id, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const
bool serialized_size_complex_array(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const

◆ serialize_complex_member_i()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_complex_member_i ( DCPS::Serializer ser,
DDS::MemberId  id,
DCPS::Sample::Extent  ext 
) const

Definition at line 5768 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::serialize_i().

5771 {
5772  const DDS::DynamicData_var& dd_var = complex_map_.at(id);
5773  const DynamicDataImpl* data_impl = dynamic_cast<const DynamicDataImpl*>(dd_var.in());
5774  if (!data_impl) {
5775  return false;
5776  }
5777  return data_impl->serialize_i(ser, ext);
5778 }
DynamicDataImpl(DDS::DynamicType_ptr type)

◆ serialize_complex_sequence()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_complex_sequence ( DCPS::Serializer ser,
CORBA::ULong  size,
CORBA::ULong  bound,
const DDS::DynamicType_var &  elem_type,
DCPS::Sample::Extent  ext 
) const

Definition at line 6139 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6141 {
6142  IndexToIdMap index_to_id(size, MEMBER_ID_INVALID);
6143  for (const_complex_iterator it = complex_map_.begin(); it != complex_map_.end(); ++it) {
6144  CORBA::ULong index;
6145  if (!data_->get_index_from_id(it->first, index, bound)) {
6146  return false;
6147  }
6148  index_to_id[index] = it->first;
6149  }
6150 
6151  const DCPS::Encoding& encoding = ser.encoding();
6152  size_t total_size = 0;
6153  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6154  if (!serialized_size_complex_sequence(encoding, total_size, index_to_id, elem_type, ext) ||
6155  !ser.write_delimiter(total_size)) {
6156  return false;
6157  }
6158  }
6159 
6160  if (!(ser << size)) {
6161  return false;
6162  }
6163  if (size == 0) {
6164  return true;
6165  }
6166  return serialize_complex_sequence_i(ser, index_to_id, elem_type, ext);
6167 }
bool serialize_complex_sequence_i(DCPS::Serializer &ser, const IndexToIdMap &index_to_id, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const
bool serialized_size_complex_sequence(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const

◆ serialize_complex_sequence_i()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_complex_sequence_i ( DCPS::Serializer ser,
const IndexToIdMap &  index_to_id,
const DDS::DynamicType_var &  elem_type,
DCPS::Sample::Extent  ext 
) const

Definition at line 6121 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::DynamicDataImpl(), and OpenDDS::XTypes::MEMBER_ID_INVALID.

6123 {
6124  for (CORBA::ULong i = 0; i < index_to_id.size(); ++i) {
6125  const CORBA::ULong id = index_to_id[i];
6126  if (id != MEMBER_ID_INVALID) {
6127  if (!serialize_complex_member_i(ser, id, ext)) {
6128  return false;
6129  }
6130  } else {
6131  if (!DynamicDataImpl(elem_type).serialize_i(ser, ext)) {
6132  return false;
6133  }
6134  }
6135  }
6136  return true;
6137 }
bool serialize_complex_member_i(DCPS::Serializer &ser, DDS::MemberId id, DCPS::Sample::Extent ext) const
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
DynamicDataImpl(DDS::DynamicType_ptr type)

◆ serialize_discriminator_member_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_discriminator_member_xcdr2 ( DCPS::Serializer ser,
CORBA::Long  value,
const DDS::DynamicType_var &  disc_type,
DDS::ExtensibilityKind  extensibility 
) const

Definition at line 8234 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), DDS::MUTABLE, DDS::RETCODE_OK, OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, OpenDDS::XTypes::TK_UINT8, value, and OpenDDS::DCPS::Serializer::write_parameter_id().

8237 {
8238  const DCPS::Encoding& encoding = ser.encoding();
8239  const TypeKind disc_tk = disc_type->get_kind();
8240  if (extensibility == DDS::MUTABLE) {
8241  size_t disc_size = 0;
8242  if (data_->is_primitive(disc_tk)) {
8243  serialized_size_primitive_member(encoding, disc_size, disc_tk);
8244  } else {
8245  serialized_size_enum(encoding, disc_size, disc_type);
8246  }
8247  // Use member Id 0 for discriminator?
8248  if (!ser.write_parameter_id(0, disc_size, false)) {
8249  return false;
8250  }
8251  }
8252 
8253  switch (disc_tk) {
8254  case TK_BOOLEAN:
8255  return ser << static_cast<CORBA::Boolean>(value);
8256  case TK_BYTE:
8257  return ser << static_cast<CORBA::Octet>(value);
8258  case TK_CHAR8:
8259  return ser << static_cast<CORBA::Char>(value);
8260 #ifdef DDS_HAS_WCHAR
8261  case TK_CHAR16:
8262  return ser << static_cast<CORBA::WChar>(value);
8263 #endif
8264  case TK_INT8:
8265  return ser << static_cast<CORBA::Int8>(value);
8266  case TK_UINT8:
8267  return ser << static_cast<CORBA::UInt8>(value);
8268  case TK_INT16:
8269  return ser << static_cast<CORBA::Short>(value);
8270  case TK_UINT16:
8271  return ser << static_cast<CORBA::UShort>(value);
8272  case TK_INT32:
8273  return ser << value;
8274  case TK_UINT32:
8275  return ser << static_cast<CORBA::ULong>(value);
8276  case TK_INT64:
8277  return ser << static_cast<CORBA::LongLong>(value);
8278  case TK_UINT64:
8279  return ser << static_cast<CORBA::ULongLong>(value);
8280  case TK_ENUM: {
8281  DDS::TypeDescriptor_var td;
8282  if (disc_type->get_descriptor(td) != DDS::RETCODE_OK) {
8283  return false;
8284  }
8285  const CORBA::ULong bitbound = td->bound()[0];
8286  if (bitbound >= 1 && bitbound <= 8) {
8287  return ser << static_cast<CORBA::Int8>(value);
8288  } else if (bitbound >= 9 && bitbound <= 16) {
8289  return ser << static_cast<CORBA::Short>(value);
8290  } else if (bitbound >= 17 && bitbound <= 32) {
8291  return ser << value;
8292  }
8293  }
8294  }
8295  return false;
8296 }
const TypeKind TK_INT8
Definition: TypeObject.h:225
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_OK
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
bool serialized_size_enum(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &enum_type) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const TypeKind TK_UINT16
Definition: TypeObject.h:219
ACE_CDR::ULong ULong
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const TypeKind TK_INT16
Definition: TypeObject.h:216
const TypeKind TK_ENUM
Definition: TypeObject.h:238
bool is_primitive(TypeKind tk) const
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
bool serialized_size_primitive_member(const DCPS::Encoding &encoding, size_t &size, TypeKind member_tk) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialize_enum_array()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_array ( DCPS::Serializer ser,
CORBA::ULong  bitbound,
CORBA::ULong  length,
const DDS::DynamicType_var &  enum_type 
) const

Definition at line 6628 of file DynamicDataImpl.cpp.

6630 {
6631  if (bitbound >= 1 && bitbound <= 8) {
6632  return serialize_enum_array_as_int8s(ser, length, enum_type);
6633  } else if (bitbound >= 9 && bitbound <= 16) {
6634  return serialize_enum_array_as_int16s(ser, length, enum_type);
6635  } else if (bitbound >= 17 && bitbound <= 32) {
6636  return serialize_enum_array_as_int32s(ser, length, enum_type);
6637  }
6638  return false;
6639 }
bool serialize_enum_array_as_int32s(DCPS::Serializer &ser, CORBA::ULong length, const DDS::DynamicType_var &enum_type) const
bool serialize_enum_array_as_int8s(DCPS::Serializer &ser, CORBA::ULong length, const DDS::DynamicType_var &enum_type) const
bool serialize_enum_array_as_int16s(DCPS::Serializer &ser, CORBA::ULong length, const DDS::DynamicType_var &enum_type) const

◆ serialize_enum_array_as_int16s()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_array_as_int16s ( DCPS::Serializer ser,
CORBA::ULong  length,
const DDS::DynamicType_var &  enum_type 
) const

Definition at line 6578 of file DynamicDataImpl.cpp.

6580 {
6581  DDS::Int16Seq enumarr;
6582  return reconstruct_enum_collection<CORBA::Short>(enumarr, length, length, enum_type, CORBA::Short()) &&
6583  serialize_enum_array_as_ints_i(ser, enumarr);
6584 }
ACE_CDR::Short Short
sequence< short > Int16Seq
bool serialize_enum_array_as_ints_i(DCPS::Serializer &ser, const DDS::Int8Seq &enumarr) const

◆ serialize_enum_array_as_int32s()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_array_as_int32s ( DCPS::Serializer ser,
CORBA::ULong  length,
const DDS::DynamicType_var &  enum_type 
) const

Definition at line 6608 of file DynamicDataImpl.cpp.

6610 {
6611  DDS::Int32Seq enumarr;
6612  return reconstruct_enum_collection<CORBA::Long>(enumarr, length, length, enum_type, CORBA::Long()) &&
6613  serialize_enum_array_as_ints_i(ser, enumarr);
6614 }
ACE_CDR::Long Long
sequence< long > Int32Seq
bool serialize_enum_array_as_ints_i(DCPS::Serializer &ser, const DDS::Int8Seq &enumarr) const

◆ serialize_enum_array_as_int8s()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_array_as_int8s ( DCPS::Serializer ser,
CORBA::ULong  length,
const DDS::DynamicType_var &  enum_type 
) const

Definition at line 6548 of file DynamicDataImpl.cpp.

6550 {
6551  DDS::Int8Seq enumarr;
6552  return reconstruct_enum_collection<CORBA::Int8>(enumarr, length, length, enum_type, ACE_OutputCDR::from_int8(0)) &&
6553  serialize_enum_array_as_ints_i(ser, enumarr);
6554 }
bool serialize_enum_array_as_ints_i(DCPS::Serializer &ser, const DDS::Int8Seq &enumarr) const
sequence< int8 > Int8Seq

◆ serialize_enum_array_as_ints_i() [1/3]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_array_as_ints_i ( DCPS::Serializer ser,
const DDS::Int8Seq enumarr 
) const

Definition at line 6534 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6536 {
6537  const DCPS::Encoding& encoding = ser.encoding();
6538  size_t total_size = 0;
6539  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6540  serialized_size_enum_array_as_int8s(encoding, total_size, enumarr.length());
6541  if (!ser.write_delimiter(total_size)) {
6542  return false;
6543  }
6544  }
6545  return ser.write_int8_array(enumarr.get_buffer(), enumarr.length());
6546 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_enum_array_as_int8s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialize_enum_array_as_ints_i() [2/3]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_array_as_ints_i ( DCPS::Serializer ser,
const DDS::Int16Seq enumarr 
) const

Definition at line 6564 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Serializer::write_short_array(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6566 {
6567  const DCPS::Encoding& encoding = ser.encoding();
6568  size_t total_size = 0;
6569  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6570  serialized_size_enum_array_as_int16s(encoding, total_size, enumarr.length());
6571  if (!ser.write_delimiter(total_size)) {
6572  return false;
6573  }
6574  }
6575  return ser.write_short_array(enumarr.get_buffer(), enumarr.length());
6576 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_enum_array_as_int16s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialize_enum_array_as_ints_i() [3/3]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_array_as_ints_i ( DCPS::Serializer ser,
const DDS::Int32Seq enumarr 
) const

Definition at line 6594 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Serializer::write_long_array(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6596 {
6597  const DCPS::Encoding& encoding = ser.encoding();
6598  size_t total_size = 0;
6599  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6600  serialized_size_enum_array_as_int32s(encoding, total_size, enumarr.length());
6601  if (!ser.write_delimiter(total_size)) {
6602  return false;
6603  }
6604  }
6605  return ser.write_long_array(enumarr.get_buffer(), enumarr.length());
6606 }
void serialized_size_enum_array_as_int32s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)

◆ serialize_enum_default_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_default_value ( DCPS::Serializer ser,
const DDS::DynamicType_var &  enum_type 
) const

Definition at line 4198 of file DynamicDataImpl.cpp.

References DDS::RETCODE_OK.

4200 {
4201  // The first enumerator is used as the enum's default value (Table 9).
4202  DDS::DynamicTypeMember_var first_dtm;
4203  if (enum_type->get_member_by_index(first_dtm, 0) != DDS::RETCODE_OK) {
4204  return false;
4205  }
4206  DDS::MemberDescriptor_var first_md;
4207  if (first_dtm->get_descriptor(first_md) != DDS::RETCODE_OK) {
4208  return false;
4209  }
4210  DDS::TypeDescriptor_var descriptor;
4211  if (enum_type->get_descriptor(descriptor) != DDS::RETCODE_OK) {
4212  return false;
4213  }
4214  const CORBA::ULong bit_bound = descriptor->bound()[0];
4215 
4216  if (bit_bound >= 1 && bit_bound <= 8) {
4217  return ser << static_cast<CORBA::Int8>(first_md->id());
4218  } else if (bit_bound >= 9 && bit_bound <= 16) {
4219  return ser << static_cast<CORBA::Short>(first_md->id());
4220  } else if (bit_bound >= 17 && bit_bound <= 32) {
4221  return ser << static_cast<CORBA::Long>(first_md->id());
4222  }
4223  return false;
4224 }
const ReturnCode_t RETCODE_OK
ACE_CDR::ULong ULong

◆ serialize_enum_sequence() [1/2]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_sequence ( DCPS::Serializer ser,
CORBA::ULong  size,
CORBA::ULong  bitbound,
CORBA::ULong  seqbound,
const DDS::DynamicType_var &  enum_type 
) const

Definition at line 5343 of file DynamicDataImpl.cpp.

5346 {
5347  if (bitbound >= 1 && bitbound <= 8) {
5348  return serialize_enum_sequence_as_int8s(ser, size, seqbound, enum_type);
5349  } else if (bitbound >= 9 && bitbound <= 16) {
5350  return serialize_enum_sequence_as_int16s(ser, size, seqbound, enum_type);
5351  } else if (bitbound >= 17 && bitbound <= 32) {
5352  return serialize_enum_sequence_as_int32s(ser, size, seqbound, enum_type);
5353  }
5354  return false;
5355 }
bool serialize_enum_sequence_as_int16s(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound, const DDS::DynamicType_var &enum_type) const
bool serialize_enum_sequence_as_int8s(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound, const DDS::DynamicType_var &enum_type) const
bool serialize_enum_sequence_as_int32s(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound, const DDS::DynamicType_var &enum_type) const

◆ serialize_enum_sequence() [2/2]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_sequence ( DCPS::Serializer ser,
const_sequence_iterator  it 
) const

Definition at line 7731 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, and OpenDDS::XTypes::TK_INT8.

7733 {
7734  switch (it->second.elem_kind_) {
7735  case TK_INT8: {
7736  const DDS::Int8Seq& seq = it->second.get<DDS::Int8Seq>();
7737  return serialize_enum_sequence_as_ints_i(ser, seq);
7738  }
7739  case TK_INT16: {
7740  const DDS::Int16Seq& seq = it->second.get<DDS::Int16Seq>();
7741  return serialize_enum_sequence_as_ints_i(ser, seq);
7742  }
7743  case TK_INT32: {
7744  const DDS::Int32Seq& seq = it->second.get<DDS::Int32Seq>();
7745  return serialize_enum_sequence_as_ints_i(ser, seq);
7746  }
7747  }
7748  return false;
7749 }
const TypeKind TK_INT8
Definition: TypeObject.h:225
const TypeKind TK_INT32
Definition: TypeObject.h:217
bool serialize_enum_sequence_as_ints_i(DCPS::Serializer &ser, const DDS::Int8Seq &enumseq) const
sequence< short > Int16Seq
sequence< long > Int32Seq
sequence< int8 > Int8Seq
const TypeKind TK_INT16
Definition: TypeObject.h:216

◆ serialize_enum_sequence_as_int16s()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_sequence_as_int16s ( DCPS::Serializer ser,
CORBA::ULong  size,
CORBA::ULong  bound,
const DDS::DynamicType_var &  enum_type 
) const

Definition at line 5276 of file DynamicDataImpl.cpp.

5278 {
5279  DDS::Int16Seq enumseq;
5280  return reconstruct_enum_collection<CORBA::Short>(enumseq, size, bound, enum_type, CORBA::Short()) &&
5281  serialize_enum_sequence_as_ints_i(ser, enumseq);
5282 }
ACE_CDR::Short Short
bool serialize_enum_sequence_as_ints_i(DCPS::Serializer &ser, const DDS::Int8Seq &enumseq) const
sequence< short > Int16Seq

◆ serialize_enum_sequence_as_int32s()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_sequence_as_int32s ( DCPS::Serializer ser,
CORBA::ULong  size,
CORBA::ULong  bound,
const DDS::DynamicType_var &  enum_type 
) const

Definition at line 5323 of file DynamicDataImpl.cpp.

5325 {
5326  DDS::Int32Seq enumseq;
5327  return reconstruct_enum_collection<CORBA::Long>(enumseq, size, bound, enum_type, CORBA::Long()) &&
5328  serialize_enum_sequence_as_ints_i(ser, enumseq);
5329 }
ACE_CDR::Long Long
bool serialize_enum_sequence_as_ints_i(DCPS::Serializer &ser, const DDS::Int8Seq &enumseq) const
sequence< long > Int32Seq

◆ serialize_enum_sequence_as_int8s()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_sequence_as_int8s ( DCPS::Serializer ser,
CORBA::ULong  size,
CORBA::ULong  bound,
const DDS::DynamicType_var &  enum_type 
) const

Definition at line 5229 of file DynamicDataImpl.cpp.

5231 {
5232  DDS::Int8Seq enumseq;
5233  return reconstruct_enum_collection<CORBA::Int8>(enumseq, size, bound, enum_type, ACE_OutputCDR::from_int8(0)) &&
5234  serialize_enum_sequence_as_ints_i(ser, enumseq);
5235 }
bool serialize_enum_sequence_as_ints_i(DCPS::Serializer &ser, const DDS::Int8Seq &enumseq) const
sequence< int8 > Int8Seq

◆ serialize_enum_sequence_as_ints_i() [1/3]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_sequence_as_ints_i ( DCPS::Serializer ser,
const DDS::Int8Seq enumseq 
) const

Definition at line 5208 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

5210 {
5211  const DCPS::Encoding& encoding = ser.encoding();
5212  size_t total_size = 0;
5213  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
5214  serialized_size_enum_sequence_as_int8s(encoding, total_size, enumseq.length());
5215  if (!ser.write_delimiter(total_size)) {
5216  return false;
5217  }
5218  }
5219  const CORBA::ULong length = enumseq.length();
5220  if (!(ser << length)) {
5221  return false;
5222  }
5223  if (length == 0) {
5224  return true;
5225  }
5226  return ser.write_int8_array(enumseq.get_buffer(), length);
5227 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULong ULong
void serialized_size_enum_sequence_as_int8s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialize_enum_sequence_as_ints_i() [2/3]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_sequence_as_ints_i ( DCPS::Serializer ser,
const DDS::Int16Seq enumseq 
) const

Definition at line 5255 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Serializer::write_short_array(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

5257 {
5258  const DCPS::Encoding& encoding = ser.encoding();
5259  size_t total_size = 0;
5260  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
5261  serialized_size_enum_sequence_as_int16s(encoding, total_size, enumseq.length());
5262  if (!ser.write_delimiter(total_size)) {
5263  return false;
5264  }
5265  }
5266  const CORBA::ULong length = enumseq.length();
5267  if (!(ser << length)) {
5268  return false;
5269  }
5270  if (length == 0) {
5271  return true;
5272  }
5273  return ser.write_short_array(enumseq.get_buffer(), length);
5274 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_enum_sequence_as_int16s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
ACE_CDR::ULong ULong

◆ serialize_enum_sequence_as_ints_i() [3/3]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_sequence_as_ints_i ( DCPS::Serializer ser,
const DDS::Int32Seq enumseq 
) const

Definition at line 5302 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Serializer::write_long_array(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

5304 {
5305  const DCPS::Encoding& encoding = ser.encoding();
5306  size_t total_size = 0;
5307  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
5308  serialized_size_enum_sequence_as_int32s(encoding, total_size, enumseq.length());
5309  if (!ser.write_delimiter(total_size)) {
5310  return false;
5311  }
5312  }
5313  const CORBA::ULong length = enumseq.length();
5314  if (!(ser << length)) {
5315  return false;
5316  }
5317  if (length == 0) {
5318  return true;
5319  }
5320  return ser.write_long_array(enumseq.get_buffer(), length);
5321 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULong ULong
void serialized_size_enum_sequence_as_int32s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialize_enum_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_value ( DCPS::Serializer ser) const

Definition at line 4226 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::MEMBER_ID_INVALID, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by OpenDDS::XTypes::DynamicDataImpl::serialize_i().

4227 {
4228  const_single_iterator it = single_map_.find(MEMBER_ID_INVALID);
4229  if (it != single_map_.end()) {
4230  return serialize_single_value(ser, it->second);
4231  }
4232  return serialize_enum_default_value(ser, type_);
4233 }
bool serialize_single_value(DCPS::Serializer &ser, const SingleValue &sv) const
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
bool serialize_enum_default_value(DCPS::Serializer &ser, const DDS::DynamicType_var &enum_type) const

◆ serialize_generic_string_array()

template<typename StringType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_generic_string_array ( DCPS::Serializer ser,
CORBA::ULong  length 
) const

Definition at line 6507 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6509 {
6510  IndexToIdMap index_to_id(length, MEMBER_ID_INVALID);
6511  if (!get_index_to_id_map(index_to_id, length)) {
6512  return false;
6513  }
6514 
6515  const DCPS::Encoding& encoding = ser.encoding();
6516  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6517  size_t total_size = 0;
6518  if (!serialized_size_generic_string_array<StringType>(encoding, total_size, index_to_id) ||
6519  !ser.write_delimiter(total_size)) {
6520  return false;
6521  }
6522  }
6523  return serialize_generic_string_collection<StringType>(ser, index_to_id);
6524 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
bool get_index_to_id_map(IndexToIdMap &index_to_id, CORBA::ULong bound) const

◆ serialize_generic_string_collection()

template<typename StringType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_generic_string_collection ( DCPS::Serializer ser,
const IndexToIdMap &  index_to_id 
) const

Definition at line 5113 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Sample::Full, and OpenDDS::XTypes::MEMBER_ID_INVALID.

5115 {
5116  for (CORBA::ULong i = 0; i < index_to_id.size(); ++i) {
5117  const DDS::MemberId id = index_to_id[i];
5118  if (id != MEMBER_ID_INVALID) {
5119  const_single_iterator single_it = single_map_.find(id);
5120  if (single_it != single_map_.end()) {
5121  if (!serialize_single_value(ser, single_it->second)) {
5122  return false;
5123  }
5124  } else if (!serialize_complex_member_i(ser, id, DCPS::Sample::Full)) {
5125  return false;
5126  }
5127  } else { // Not set by the user. Use default value.
5128  StringType default_value;
5129  set_default_basic_value(default_value);
5130  if (!(ser << default_value)) {
5131  return false;
5132  }
5133  }
5134  }
5135  return true;
5136 }
ACE_CDR::ULong MemberId
Definition: TypeObject.h:910
bool serialize_single_value(DCPS::Serializer &ser, const SingleValue &sv) const
bool serialize_complex_member_i(DCPS::Serializer &ser, DDS::MemberId id, DCPS::Sample::Extent ext) const
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
void set_default_basic_value(CORBA::Long &value) const

◆ serialize_generic_string_sequence()

template<typename StringType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_generic_string_sequence ( DCPS::Serializer ser,
CORBA::ULong  length,
CORBA::ULong  bound 
) const

Definition at line 5139 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

5141 {
5142  IndexToIdMap index_to_id(length, MEMBER_ID_INVALID);
5143  if (!get_index_to_id_map(index_to_id, bound)) {
5144  return false;
5145  }
5146 
5147  const DCPS::Encoding& encoding = ser.encoding();
5148  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
5149  size_t total_size = 0;
5150  if (!serialized_size_generic_string_sequence<StringType>(encoding, total_size, index_to_id) ||
5151  !ser.write_delimiter(total_size)) {
5152  return false;
5153  }
5154  }
5155  if (!(ser << length)) {
5156  return false;
5157  }
5158  if (length == 0) {
5159  return true;
5160  }
5161  return serialize_generic_string_collection<StringType>(ser, index_to_id);
5162 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
bool get_index_to_id_map(IndexToIdMap &index_to_id, CORBA::ULong bound) const

◆ serialize_nested_basic_sequences()

template<typename SequenceType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_nested_basic_sequences ( DCPS::Serializer ser,
const IndexToIdMap &  index_to_id,
SequenceType  protoseq 
) const

Definition at line 5781 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Sample::Full, and OpenDDS::XTypes::MEMBER_ID_INVALID.

5783 {
5784  for (CORBA::ULong i = 0; i < index_to_id.size(); ++i) {
5785  const CORBA::ULong id = index_to_id[i];
5786  if (id != MEMBER_ID_INVALID) {
5787  const_sequence_iterator it = sequence_map_.find(id);
5788  if (it != sequence_map_.end()) {
5789  if (!serialize_sequence_value(ser, it->second)) {
5790  return false;
5791  }
5792  } else if (!serialize_complex_member_i(ser, id, DCPS::Sample::Full)) {
5793  return false;
5794  }
5795  } else {
5796  // Table 9: Use zero-length sequence of the same element type.
5797  protoseq.length(0);
5798  if (!(ser << protoseq)) {
5799  return false;
5800  }
5801  }
5802  }
5803  return true;
5804 }
bool serialize_complex_member_i(DCPS::Serializer &ser, DDS::MemberId id, DCPS::Sample::Extent ext) const
bool serialize_sequence_value(DCPS::Serializer &ser, const SequenceValue &sv) const
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong

◆ serialize_nested_bitmask_sequences()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_nested_bitmask_sequences ( DCPS::Serializer ser,
const IndexToIdMap &  index_to_id 
) const

Definition at line 6041 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Sample::Full, OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::uint32_cdr_size, OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6043 {
6044  for (CORBA::ULong i = 0; i < index_to_id.size(); ++i) {
6045  const CORBA::ULong id = index_to_id[i];
6046  if (id != MEMBER_ID_INVALID) {
6047  const_sequence_iterator it = sequence_map_.find(id);
6048  if (it != sequence_map_.end()) {
6049  if (!serialize_bitmask_sequence(ser, it)) {
6050  return false;
6051  }
6052  } else if (!serialize_complex_member_i(ser, id, DCPS::Sample::Full)) {
6053  return false;
6054  }
6055  } else { // Empty sequence of bitmasks
6056  if (ser.encoding().xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6057  if (!ser.write_delimiter(2 * DCPS::uint32_cdr_size)) {
6058  return false;
6059  }
6060  }
6061  if (!(ser << static_cast<CORBA::ULong>(0))) {
6062  return false;
6063  }
6064  }
6065  }
6066  return true;
6067 }
bool serialize_complex_member_i(DCPS::Serializer &ser, DDS::MemberId id, DCPS::Sample::Extent ext) const
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
const size_t uint32_cdr_size
Definition: Serializer.h:96
bool serialize_bitmask_sequence(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bitbound, CORBA::ULong seqbound) const

◆ serialize_nested_enum_sequences()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_nested_enum_sequences ( DCPS::Serializer ser,
const IndexToIdMap &  index_to_id 
) const

Definition at line 5956 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Sample::Full, OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::uint32_cdr_size, OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

5958 {
5959  for (CORBA::ULong i = 0; i < index_to_id.size(); ++i) {
5960  const CORBA::ULong id = index_to_id[i];
5961  if (id != MEMBER_ID_INVALID) {
5962  const_sequence_iterator it = sequence_map_.find(id);
5963  if (it != sequence_map_.end()) {
5964  if (!serialize_enum_sequence(ser, it)) {
5965  return false;
5966  }
5967  } else if (!serialize_complex_member_i(ser, id, DCPS::Sample::Full)) {
5968  return false;
5969  }
5970  } else { // Empty sequence of enums
5971  if (ser.encoding().xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
5972  if (!ser.write_delimiter(2 * DCPS::uint32_cdr_size)) {
5973  return false;
5974  }
5975  }
5976  if (!(ser << static_cast<CORBA::ULong>(0))) {
5977  return false;
5978  }
5979  }
5980  }
5981  return true;
5982 }
bool serialize_complex_member_i(DCPS::Serializer &ser, DDS::MemberId id, DCPS::Sample::Extent ext) const
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
const size_t uint32_cdr_size
Definition: Serializer.h:96
bool serialize_enum_sequence(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bitbound, CORBA::ULong seqbound, const DDS::DynamicType_var &enum_type) const

◆ serialize_nesting_basic_array()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_nesting_basic_array ( DCPS::Serializer ser,
TypeKind  nested_elem_tk,
CORBA::ULong  length 
) const

Definition at line 6863 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

6865 {
6866  switch (nested_elem_tk) {
6867  case TK_INT32:
6868  return serialize_nesting_basic_array_i(ser, length, DDS::Int32Seq());
6869  case TK_UINT32:
6870  return serialize_nesting_basic_array_i(ser, length, DDS::UInt32Seq());
6871  case TK_INT8:
6872  return serialize_nesting_basic_array_i(ser, length, DDS::Int8Seq());
6873  case TK_UINT8:
6874  return serialize_nesting_basic_array_i(ser, length, DDS::UInt8Seq());
6875  case TK_INT16:
6876  return serialize_nesting_basic_array_i(ser, length, DDS::Int16Seq());
6877  case TK_UINT16:
6878  return serialize_nesting_basic_array_i(ser, length, DDS::UInt16Seq());
6879  case TK_INT64:
6880  return serialize_nesting_basic_array_i(ser, length, DDS::Int64Seq());
6881  case TK_UINT64:
6882  return serialize_nesting_basic_array_i(ser, length, DDS::UInt64Seq());
6883  case TK_FLOAT32:
6884  return serialize_nesting_basic_array_i(ser, length, DDS::Float32Seq());
6885  case TK_FLOAT64:
6886  return serialize_nesting_basic_array_i(ser, length, DDS::Float64Seq());
6887  case TK_FLOAT128:
6888  return serialize_nesting_basic_array_i(ser, length, DDS::Float128Seq());
6889  case TK_CHAR8:
6890  return serialize_nesting_basic_array_i(ser, length, DDS::CharSeq());
6891  case TK_STRING8:
6892  return serialize_nesting_basic_array_i(ser, length, DDS::StringSeq());
6893 #ifdef DDS_HAS_WCHAR
6894  case TK_CHAR16:
6895  return serialize_nesting_basic_array_i(ser, length, DDS::WcharSeq());
6896  case TK_STRING16:
6897  return serialize_nesting_basic_array_i(ser, length, DDS::WstringSeq());
6898 #endif
6899  case TK_BYTE:
6900  return serialize_nesting_basic_array_i(ser, length, DDS::ByteSeq());
6901  case TK_BOOLEAN:
6902  return serialize_nesting_basic_array_i(ser, length, DDS::BooleanSeq());
6903  }
6904  return false;
6905 }
sequence< char > CharSeq
const TypeKind TK_INT8
Definition: TypeObject.h:225
sequence< unsigned long > UInt32Seq
sequence< unsigned long long > UInt64Seq
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
sequence< float > Float32Seq
sequence< boolean > BooleanSeq
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
sequence< wchar > WcharSeq
sequence< long long > Int64Seq
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
bool serialize_nesting_basic_array_i(DCPS::Serializer &ser, CORBA::ULong length, SequenceType protoseq) const
const TypeKind TK_STRING16
Definition: TypeObject.h:232
sequence< string > StringSeq
Definition: DdsDcpsCore.idl:50
sequence< uint8 > UInt8Seq
const TypeKind TK_UINT16
Definition: TypeObject.h:219
sequence< double > Float64Seq
sequence< short > Int16Seq
sequence< long double > Float128Seq
const TypeKind TK_INT64
Definition: TypeObject.h:218
sequence< long > Int32Seq
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
sequence< wstring > WstringSeq
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
sequence< int8 > Int8Seq
const TypeKind TK_INT16
Definition: TypeObject.h:216
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_STRING8
Definition: TypeObject.h:231
sequence< unsigned short > UInt16Seq
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
sequence< octet > ByteSeq

◆ serialize_nesting_basic_array_i()

template<typename SequenceType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_nesting_basic_array_i ( DCPS::Serializer ser,
CORBA::ULong  length,
SequenceType  protoseq 
) const

Definition at line 6799 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6801 {
6802  IndexToIdMap index_to_id(length, MEMBER_ID_INVALID);
6803  if (!get_index_to_id_map(index_to_id, length)) {
6804  return false;
6805  }
6806 
6807  const DCPS::Encoding& encoding = ser.encoding();
6808  size_t total_size = 0;
6809  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6810  if (!serialized_size_nesting_basic_array(encoding, total_size, index_to_id, protoseq) ||
6811  !ser.write_delimiter(total_size)) {
6812  return false;
6813  }
6814  }
6815  return serialize_nested_basic_sequences(ser, index_to_id, protoseq);
6816 }
bool serialized_size_nesting_basic_array(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, SequenceType protoseq) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
bool serialize_nested_basic_sequences(DCPS::Serializer &ser, const IndexToIdMap &index_to_id, SequenceType protoseq) const
bool get_index_to_id_map(IndexToIdMap &index_to_id, CORBA::ULong bound) const

◆ serialize_nesting_basic_sequence()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_nesting_basic_sequence ( DCPS::Serializer ser,
TypeKind  nested_elem_tk,
CORBA::ULong  size,
CORBA::ULong  bound 
) const

Definition at line 5881 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

5883 {
5884  switch (nested_elem_tk) {
5885  case TK_INT32:
5886  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::Int32Seq());
5887  case TK_UINT32:
5888  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::UInt32Seq());
5889  case TK_INT8:
5890  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::Int8Seq());
5891  case TK_UINT8:
5892  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::UInt8Seq());
5893  case TK_INT16:
5894  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::Int16Seq());
5895  case TK_UINT16:
5896  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::UInt16Seq());
5897  case TK_INT64:
5898  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::Int64Seq());
5899  case TK_UINT64:
5900  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::UInt64Seq());
5901  case TK_FLOAT32:
5902  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::Float32Seq());
5903  case TK_FLOAT64:
5904  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::Float64Seq());
5905  case TK_FLOAT128:
5906  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::Float128Seq());
5907  case TK_CHAR8:
5908  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::CharSeq());
5909  case TK_STRING8:
5910  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::StringSeq());
5911 #ifdef DDS_HAS_WCHAR
5912  case TK_CHAR16:
5913  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::WcharSeq());
5914  case TK_STRING16:
5915  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::WstringSeq());
5916 #endif
5917  case TK_BYTE:
5918  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::ByteSeq());
5919  case TK_BOOLEAN:
5920  return serialize_nesting_basic_sequence_i(ser, size, bound, DDS::BooleanSeq());
5921  }
5922  return false;
5923 }
sequence< char > CharSeq
const TypeKind TK_INT8
Definition: TypeObject.h:225
sequence< unsigned long > UInt32Seq
sequence< unsigned long long > UInt64Seq
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
sequence< float > Float32Seq
sequence< boolean > BooleanSeq
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
sequence< wchar > WcharSeq
sequence< long long > Int64Seq
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const TypeKind TK_STRING16
Definition: TypeObject.h:232
sequence< string > StringSeq
Definition: DdsDcpsCore.idl:50
sequence< uint8 > UInt8Seq
const TypeKind TK_UINT16
Definition: TypeObject.h:219
sequence< double > Float64Seq
sequence< short > Int16Seq
sequence< long double > Float128Seq
const TypeKind TK_INT64
Definition: TypeObject.h:218
sequence< long > Int32Seq
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
sequence< wstring > WstringSeq
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
sequence< int8 > Int8Seq
const TypeKind TK_INT16
Definition: TypeObject.h:216
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_STRING8
Definition: TypeObject.h:231
sequence< unsigned short > UInt16Seq
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
sequence< octet > ByteSeq
bool serialize_nesting_basic_sequence_i(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound, SequenceType protoseq) const

◆ serialize_nesting_basic_sequence_i()

template<typename SequenceType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_nesting_basic_sequence_i ( DCPS::Serializer ser,
CORBA::ULong  size,
CORBA::ULong  bound,
SequenceType  protoseq 
) const

Definition at line 5807 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

5809 {
5810  // Map from index to ID. Use MEMBER_ID_INVALID to indicate there is
5811  // no data for an element at a given index.
5812  IndexToIdMap index_to_id(size, MEMBER_ID_INVALID);
5813  if (!get_index_to_id_map(index_to_id, bound)) {
5814  return false;
5815  }
5816 
5817  const DCPS::Encoding& encoding = ser.encoding();
5818  size_t total_size = 0;
5819  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
5820  if (!serialized_size_nesting_basic_sequence(encoding, total_size, index_to_id, protoseq) ||
5821  !ser.write_delimiter(total_size)) {
5822  return false;
5823  }
5824  }
5825 
5826  // Serialize the top-level sequence's length
5827  if (!(ser << size)) {
5828  return false;
5829  }
5830  if (size == 0) {
5831  return true;
5832  }
5833  return serialize_nested_basic_sequences(ser, index_to_id, protoseq);
5834 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
bool serialize_nested_basic_sequences(DCPS::Serializer &ser, const IndexToIdMap &index_to_id, SequenceType protoseq) const
bool get_index_to_id_map(IndexToIdMap &index_to_id, CORBA::ULong bound) const
bool serialized_size_nesting_basic_sequence(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, SequenceType protoseq) const

◆ serialize_nesting_bitmask_array()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_nesting_bitmask_array ( DCPS::Serializer ser,
CORBA::ULong  length 
) const

Definition at line 6940 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6942 {
6943  IndexToIdMap index_to_id(length, MEMBER_ID_INVALID);
6944  if (!get_index_to_id_map(index_to_id, length)) {
6945  return false;
6946  }
6947 
6948  const DCPS::Encoding& encoding = ser.encoding();
6949  size_t total_size = 0;
6950  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6951  if (!serialized_size_nesting_bitmask_array(encoding, total_size, index_to_id) ||
6952  !ser.write_delimiter(total_size)) {
6953  return false;
6954  }
6955  }
6956  return serialize_nested_bitmask_sequences(ser, index_to_id);
6957 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
bool serialize_nested_bitmask_sequences(DCPS::Serializer &ser, const IndexToIdMap &index_to_id) const
bool serialized_size_nesting_bitmask_array(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
bool get_index_to_id_map(IndexToIdMap &index_to_id, CORBA::ULong bound) const

◆ serialize_nesting_bitmask_sequence()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_nesting_bitmask_sequence ( DCPS::Serializer ser,
CORBA::ULong  size,
CORBA::ULong  bound 
) const

Definition at line 6069 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6071 {
6072  IndexToIdMap index_to_id(size, MEMBER_ID_INVALID);
6073  if (!get_index_to_id_map(index_to_id, bound)) {
6074  return false;
6075  }
6076 
6077  const DCPS::Encoding& encoding = ser.encoding();
6078  size_t total_size = 0;
6079  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6080  if (!serialized_size_nesting_bitmask_sequence(encoding, total_size, index_to_id) ||
6081  !ser.write_delimiter(total_size)) {
6082  return false;
6083  }
6084  }
6085 
6086  if (!(ser << size)) {
6087  return false;
6088  }
6089  if (size == 0) {
6090  return true;
6091  }
6092  return serialize_nested_bitmask_sequences(ser, index_to_id);
6093 }
bool serialized_size_nesting_bitmask_sequence(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
bool serialize_nested_bitmask_sequences(DCPS::Serializer &ser, const IndexToIdMap &index_to_id) const
bool get_index_to_id_map(IndexToIdMap &index_to_id, CORBA::ULong bound) const

◆ serialize_nesting_enum_array()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_nesting_enum_array ( DCPS::Serializer ser,
CORBA::ULong  length 
) const

Definition at line 6914 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

6916 {
6917  IndexToIdMap index_to_id(length, MEMBER_ID_INVALID);
6918  if (!get_index_to_id_map(index_to_id, length)) {
6919  return false;
6920  }
6921 
6922  const DCPS::Encoding& encoding = ser.encoding();
6923  size_t total_size = 0;
6924  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
6925  if (!serialized_size_nesting_enum_array(encoding, total_size, index_to_id) ||
6926  !ser.write_delimiter(total_size)) {
6927  return false;
6928  }
6929  }
6930  return serialize_nested_enum_sequences(ser, index_to_id);
6931 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
bool serialize_nested_enum_sequences(DCPS::Serializer &ser, const IndexToIdMap &index_to_id) const
bool serialized_size_nesting_enum_array(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
bool get_index_to_id_map(IndexToIdMap &index_to_id, CORBA::ULong bound) const

◆ serialize_nesting_enum_sequence()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_nesting_enum_sequence ( DCPS::Serializer ser,
CORBA::ULong  size,
CORBA::ULong  bound 
) const

Definition at line 5984 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

5986 {
5987  IndexToIdMap index_to_id(size, MEMBER_ID_INVALID);
5988  if (!get_index_to_id_map(index_to_id, bound)) {
5989  return false;
5990  }
5991 
5992  const DCPS::Encoding& encoding = ser.encoding();
5993  size_t total_size = 0;
5994  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
5995  if (!serialized_size_nesting_enum_sequence(encoding, total_size, index_to_id) ||
5996  !ser.write_delimiter(total_size)) {
5997  return false;
5998  }
5999  }
6000 
6001  if (!(ser << size)) {
6002  return false;
6003  }
6004  if (size == 0) {
6005  return true;
6006  }
6007  return serialize_nested_enum_sequences(ser, index_to_id);
6008 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
bool serialize_nested_enum_sequences(DCPS::Serializer &ser, const IndexToIdMap &index_to_id) const
bool serialized_size_nesting_enum_sequence(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
bool get_index_to_id_map(IndexToIdMap &index_to_id, CORBA::ULong bound) const

◆ serialize_primitive_array()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_primitive_array ( DCPS::Serializer ser,
TypeKind  elem_tk,
CORBA::ULong  length 
) const

Definition at line 6413 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, OpenDDS::XTypes::TK_UINT8, OpenDDS::DCPS::Serializer::write_boolean_array(), OpenDDS::DCPS::Serializer::write_char_array(), OpenDDS::DCPS::Serializer::write_double_array(), OpenDDS::DCPS::Serializer::write_float_array(), OpenDDS::DCPS::Serializer::write_long_array(), OpenDDS::DCPS::Serializer::write_longdouble_array(), OpenDDS::DCPS::Serializer::write_longlong_array(), OpenDDS::DCPS::Serializer::write_octet_array(), OpenDDS::DCPS::Serializer::write_short_array(), OpenDDS::DCPS::Serializer::write_ulong_array(), OpenDDS::DCPS::Serializer::write_ulonglong_array(), OpenDDS::DCPS::Serializer::write_ushort_array(), and OpenDDS::DCPS::Serializer::write_wchar_array().

6415 {
6416  switch (elem_tk) {
6417  case TK_INT32: {
6418  DDS::Int32Seq int32arr;
6419  return reconstruct_primitive_collection(int32arr, length, length, CORBA::Long()) &&
6420  ser.write_long_array(int32arr.get_buffer(), length);
6421  }
6422  case TK_UINT32: {
6423  DDS::UInt32Seq uint32arr;
6424  return reconstruct_primitive_collection(uint32arr, length, length, CORBA::ULong()) &&
6425  ser.write_ulong_array(uint32arr.get_buffer(), length);
6426  }
6427  case TK_INT8: {
6428  DDS::Int8Seq int8arr;
6429  return reconstruct_primitive_collection(int8arr, length, length, ACE_OutputCDR::from_int8(0)) &&
6430  ser.write_int8_array(int8arr.get_buffer(), length);
6431  }
6432  case TK_UINT8: {
6433  DDS::UInt8Seq uint8arr;
6434  return reconstruct_primitive_collection(uint8arr, length, length, ACE_OutputCDR::from_uint8(0)) &&
6435  ser.write_uint8_array(uint8arr.get_buffer(), length);
6436  }
6437  case TK_INT16: {
6438  DDS::Int16Seq int16arr;
6439  return reconstruct_primitive_collection(int16arr, length, length, CORBA::Short()) &&
6440  ser.write_short_array(int16arr.get_buffer(), length);
6441  }
6442  case TK_UINT16: {
6443  DDS::UInt16Seq uint16arr;
6444  return reconstruct_primitive_collection(uint16arr, length, length, CORBA::UShort()) &&
6445  ser.write_ushort_array(uint16arr.get_buffer(), length);
6446  }
6447  case TK_INT64: {
6448  DDS::Int64Seq int64arr;
6449  return reconstruct_primitive_collection(int64arr, length, length, CORBA::LongLong()) &&
6450  ser.write_longlong_array(int64arr.get_buffer(), length);
6451  }
6452  case TK_UINT64: {
6453  DDS::UInt64Seq uint64arr;
6454  return reconstruct_primitive_collection(uint64arr, length, length, CORBA::ULongLong()) &&
6455  ser.write_ulonglong_array(uint64arr.get_buffer(), length);
6456  }
6457  case TK_FLOAT32: {
6458  DDS::Float32Seq float32arr;
6459  return reconstruct_primitive_collection(float32arr, length, length, CORBA::Float()) &&
6460  ser.write_float_array(float32arr.get_buffer(), length);
6461  }
6462  case TK_FLOAT64: {
6463  DDS::Float64Seq float64arr;
6464  return reconstruct_primitive_collection(float64arr, length, length, CORBA::Double()) &&
6465  ser.write_double_array(float64arr.get_buffer(), length);
6466  }
6467  case TK_FLOAT128: {
6468  DDS::Float128Seq float128arr;
6469  return reconstruct_primitive_collection(float128arr, length, length, CORBA::LongDouble()) &&
6470  ser.write_longdouble_array(float128arr.get_buffer(), length);
6471  }
6472  case TK_CHAR8: {
6473  DDS::CharSeq chararr;
6474  return reconstruct_primitive_collection(chararr, length, length, ACE_OutputCDR::from_char('\0')) &&
6475  ser.write_char_array(chararr.get_buffer(), length);
6476  }
6477 #ifdef DDS_HAS_WCHAR
6478  case TK_CHAR16: {
6479  DDS::WcharSeq wchararr;
6480  return reconstruct_primitive_collection(wchararr, length, length, ACE_OutputCDR::from_wchar(0)) &&
6481  ser.write_wchar_array(wchararr.get_buffer(), length);
6482  }
6483 #endif
6484  case TK_BYTE: {
6485  DDS::ByteSeq bytearr;
6486  return reconstruct_primitive_collection(bytearr, length, length, ACE_OutputCDR::from_octet(0x00)) &&
6487  ser.write_octet_array(bytearr.get_buffer(), length);
6488  }
6489  case TK_BOOLEAN: {
6490  DDS::BooleanSeq boolarr;
6491  return reconstruct_primitive_collection(boolarr, length, length, ACE_OutputCDR::from_boolean(false)) &&
6492  ser.write_boolean_array(boolarr.get_buffer(), length);
6493  }
6494  }
6495  return false;
6496 }
sequence< char > CharSeq
ACE_CDR::Long Long
const TypeKind TK_INT8
Definition: TypeObject.h:225
sequence< unsigned long > UInt32Seq
sequence< unsigned long long > UInt64Seq
bool reconstruct_primitive_collection(CollectionType &collection, CORBA::ULong size, CORBA::ULong bound, const ElementType &elem_tag) const
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
sequence< float > Float32Seq
sequence< boolean > BooleanSeq
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
ACE_CDR::LongLong LongLong
sequence< wchar > WcharSeq
sequence< long long > Int64Seq
ACE_CDR::Short Short
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
sequence< uint8 > UInt8Seq
ACE_CDR::ULongLong ULongLong
const TypeKind TK_UINT16
Definition: TypeObject.h:219
sequence< double > Float64Seq
sequence< short > Int16Seq
ACE_CDR::ULong ULong
sequence< long double > Float128Seq
const TypeKind TK_INT64
Definition: TypeObject.h:218
sequence< long > Int32Seq
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
sequence< int8 > Int8Seq
const TypeKind TK_INT16
Definition: TypeObject.h:216
ACE_CDR::UShort UShort
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
sequence< unsigned short > UInt16Seq
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
sequence< octet > ByteSeq

◆ serialize_primitive_sequence()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_primitive_sequence ( DCPS::Serializer ser,
TypeKind  elem_tk,
CORBA::ULong  size,
CORBA::ULong  bound 
) const

Definition at line 4956 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

4958 {
4959  switch (elem_tk) {
4960  case TK_INT32: {
4961  DDS::Int32Seq int32seq;
4962  return reconstruct_primitive_collection(int32seq, size, bound, CORBA::Long()) &&
4963  (ser << int32seq);
4964  }
4965  case TK_UINT32: {
4966  DDS::UInt32Seq uint32seq;
4967  return reconstruct_primitive_collection(uint32seq, size, bound, CORBA::ULong()) &&
4968  (ser << uint32seq);
4969  }
4970  case TK_INT8: {
4971  DDS::Int8Seq int8seq;
4972  return reconstruct_primitive_collection(int8seq, size, bound, ACE_OutputCDR::from_int8(0)) &&
4973  (ser << int8seq);
4974  }
4975  case TK_UINT8: {
4976  DDS::UInt8Seq uint8seq;
4977  return reconstruct_primitive_collection(uint8seq, size, bound, ACE_OutputCDR::from_uint8(0)) &&
4978  (ser << uint8seq);
4979  }
4980  case TK_INT16: {
4981  DDS::Int16Seq int16seq;
4982  return reconstruct_primitive_collection(int16seq, size, bound, CORBA::Short()) &&
4983  (ser << int16seq);
4984  }
4985  case TK_UINT16: {
4986  DDS::UInt16Seq uint16seq;
4987  return reconstruct_primitive_collection(uint16seq, size, bound, CORBA::UShort()) &&
4988  (ser << uint16seq);
4989  }
4990  case TK_INT64: {
4991  DDS::Int64Seq int64seq;
4992  return reconstruct_primitive_collection(int64seq, size, bound, CORBA::LongLong()) &&
4993  (ser << int64seq);
4994  }
4995  case TK_UINT64: {
4996  DDS::UInt64Seq uint64seq;
4997  return reconstruct_primitive_collection(uint64seq, size, bound, CORBA::ULongLong()) &&
4998  (ser << uint64seq);
4999  }
5000  case TK_FLOAT32: {
5001  DDS::Float32Seq float32seq;
5002  return reconstruct_primitive_collection(float32seq, size, bound, CORBA::Float()) &&
5003  (ser << float32seq);
5004  }
5005  case TK_FLOAT64: {
5006  DDS::Float64Seq float64seq;
5007  return reconstruct_primitive_collection(float64seq, size, bound, CORBA::Double()) &&
5008  (ser << float64seq);
5009  }
5010  case TK_FLOAT128: {
5011  DDS::Float128Seq float128seq;
5012  return reconstruct_primitive_collection(float128seq, size, bound, CORBA::LongDouble()) &&
5013  (ser << float128seq);
5014  }
5015  case TK_CHAR8: {
5016  DDS::CharSeq charseq;
5017  return reconstruct_primitive_collection(charseq, size, bound, ACE_OutputCDR::from_char('\0')) &&
5018  (ser << charseq);
5019  }
5020 #ifdef DDS_HAS_WCHAR
5021  case TK_CHAR16: {
5022  DDS::WcharSeq wcharseq;
5023  return reconstruct_primitive_collection(wcharseq, size, bound, ACE_OutputCDR::from_wchar(0)) &&
5024  (ser << wcharseq);
5025  }
5026 #endif
5027  case TK_BYTE: {
5028  DDS::ByteSeq byteseq;
5029  return reconstruct_primitive_collection(byteseq, size, bound, ACE_OutputCDR::from_octet(0x00)) &&
5030  (ser << byteseq);
5031  }
5032  case TK_BOOLEAN: {
5033  DDS::BooleanSeq boolseq;
5034  return reconstruct_primitive_collection(boolseq, size, bound, ACE_OutputCDR::from_boolean(false)) &&
5035  (ser << boolseq);
5036  }
5037  }
5038  return false;
5039 }
sequence< char > CharSeq
ACE_CDR::Long Long
const TypeKind TK_INT8
Definition: TypeObject.h:225
sequence< unsigned long > UInt32Seq
sequence< unsigned long long > UInt64Seq
bool reconstruct_primitive_collection(CollectionType &collection, CORBA::ULong size, CORBA::ULong bound, const ElementType &elem_tag) const
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
sequence< float > Float32Seq
sequence< boolean > BooleanSeq
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
ACE_CDR::LongLong LongLong
sequence< wchar > WcharSeq
sequence< long long > Int64Seq
ACE_CDR::Short Short
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
sequence< uint8 > UInt8Seq
ACE_CDR::ULongLong ULongLong
const TypeKind TK_UINT16
Definition: TypeObject.h:219
sequence< double > Float64Seq
sequence< short > Int16Seq
ACE_CDR::ULong ULong
sequence< long double > Float128Seq
const TypeKind TK_INT64
Definition: TypeObject.h:218
sequence< long > Int32Seq
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
sequence< int8 > Int8Seq
const TypeKind TK_INT16
Definition: TypeObject.h:216
ACE_CDR::UShort UShort
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
sequence< unsigned short > UInt16Seq
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
sequence< octet > ByteSeq

◆ serialize_primitive_value()

template<typename PrimitiveType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_primitive_value ( DCPS::Serializer ser,
PrimitiveType  default_value 
) const

Definition at line 4166 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::MEMBER_ID_INVALID.

Referenced by OpenDDS::XTypes::DynamicDataImpl::serialize_i().

4168 {
4169  const_single_iterator it = single_map_.find(MEMBER_ID_INVALID);
4170  if (it != single_map_.end()) {
4171  return serialize_single_value(ser, it->second);
4172  }
4173 
4174  // No data stored. Use default value.
4175  set_default_basic_value(default_value);
4176  return ser << default_value;
4177 }
bool serialize_single_value(DCPS::Serializer &ser, const SingleValue &sv) const
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
void set_default_basic_value(CORBA::Long &value) const

◆ serialize_selected_member_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_selected_member_xcdr2 ( DCPS::Serializer ser,
DDS::MemberId  selected_id,
DDS::ExtensibilityKind  extensibility 
) const

Definition at line 8340 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Sample::Full, OpenDDS::XTypes::get_base_type(), DDS::RETCODE_OK, and OpenDDS::XTypes::DynamicDataBase::type_.

8342 {
8343  DDS::DynamicTypeMember_var selected_dtm;
8344  if (type_->get_member(selected_dtm, selected_id) != DDS::RETCODE_OK) {
8345  return false;
8346  }
8347  DDS::MemberDescriptor_var selected_md;
8348  if (selected_dtm->get_descriptor(selected_md) != DDS::RETCODE_OK) {
8349  return false;
8350  }
8351  DDS::DynamicType_var selected_type = get_base_type(selected_md->type());
8352  const bool optional = selected_md->is_optional();
8353  const bool must_understand = selected_md->is_must_understand();
8354 
8355  const_single_iterator single_it = single_map_.find(selected_id);
8356  if (single_it != single_map_.end()) {
8357  return serialize_single_aggregated_member_xcdr2(ser, single_it, selected_type, optional,
8358  must_understand, extensibility);
8359  }
8360 
8361  const_sequence_iterator seq_it = sequence_map_.find(selected_id);
8362  if (seq_it != sequence_map_.end()) {
8363  DDS::TypeDescriptor_var selected_td;
8364  if (selected_type->get_descriptor(selected_td) != DDS::RETCODE_OK) {
8365  return false;
8366  }
8367  const TypeKind elem_tk = get_base_type(selected_td->element_type())->get_kind();
8368  return serialize_sequence_aggregated_member_xcdr2(ser, seq_it, elem_tk, optional,
8369  must_understand, extensibility);
8370  }
8371 
8372  const_complex_iterator complex_it = complex_map_.find(selected_id);
8373  if (complex_it != complex_map_.end()) {
8374  return serialize_complex_aggregated_member_xcdr2(ser, complex_it, optional,
8375  must_understand, extensibility,
8377  }
8378  return false;
8379 }
const ReturnCode_t RETCODE_OK
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
bool serialize_complex_aggregated_member_xcdr2(DCPS::Serializer &ser, const_complex_iterator it, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility, DCPS::Sample::Extent ext) const
bool serialize_sequence_aggregated_member_xcdr2(DCPS::Serializer &ser, const_sequence_iterator it, TypeKind elem_tk, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility) const
bool serialize_single_aggregated_member_xcdr2(DCPS::Serializer &ser, const_single_iterator it, const DDS::DynamicType_var &member_type, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialize_sequence()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_sequence ( DCPS::Serializer ser,
DCPS::Sample::Extent  ext 
) const

Definition at line 6281 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::get_base_type(), DDS::RETCODE_OK, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by OpenDDS::XTypes::DynamicDataImpl::serialize_i().

6282 {
6283  DDS::TypeDescriptor_var descriptor;
6284  if (type_->get_descriptor(descriptor) != DDS::RETCODE_OK) {
6285  return false;
6286  }
6287  const CORBA::ULong bound = descriptor->bound()[0];
6288 
6289  const DDS::DynamicType_var elem_type = get_base_type(descriptor->element_type());
6290  const TypeKind elem_tk = elem_type->get_kind();
6291  DDS::TypeDescriptor_var elem_td;
6292  if (elem_type->get_descriptor(elem_td) != DDS::RETCODE_OK) {
6293  return false;
6294  }
6295 
6296  if (data_->is_basic(elem_tk) || elem_tk == TK_ENUM || elem_tk == TK_BITMASK) {
6297  const bool is_empty = single_map_.empty() && complex_map_.empty();
6298  CORBA::ULong length = 0;
6299  if (!is_empty) {
6300  CORBA::ULong largest_index;
6301  if (!get_largest_index_basic(largest_index)) {
6302  return false;
6303  }
6304  length = largest_index + 1;
6305  }
6306  if (data_->is_primitive(elem_tk)) {
6307  return serialize_primitive_sequence(ser, elem_tk, length, bound);
6308  } else if (elem_tk == TK_STRING8) {
6309  return serialize_generic_string_sequence<const char*>(ser, length, bound);
6310  } else if (elem_tk == TK_STRING16) {
6311 #ifdef DDS_HAS_WCHAR
6312  return serialize_generic_string_sequence<const CORBA::WChar*>(ser, length, bound);
6313 #else
6314  return false;
6315 #endif
6316  } else if (elem_tk == TK_ENUM) {
6317  const CORBA::ULong bit_bound = elem_td->bound()[0];
6318  return serialize_enum_sequence(ser, length, bit_bound, bound, elem_type);
6319  } else {
6320  const CORBA::ULong bit_bound = elem_td->bound()[0];
6321  return serialize_bitmask_sequence(ser, length, bit_bound, bound);
6322  }
6323  } else if (elem_tk == TK_SEQUENCE) {
6324  const DDS::DynamicType_var nested_elem_type = get_base_type(elem_td->element_type());
6325  const TypeKind nested_elem_tk = nested_elem_type->get_kind();
6326  if (data_->is_basic(nested_elem_tk) || nested_elem_tk == TK_ENUM ||
6327  nested_elem_tk == TK_BITMASK) {
6328  const bool is_empty = sequence_map_.empty() && complex_map_.empty();
6329  CORBA::ULong length = 0;
6330  if (!is_empty) {
6331  CORBA::ULong largest_index;
6332  if (!get_largest_index_basic_sequence(largest_index)) {
6333  return false;
6334  }
6335  length = largest_index + 1;
6336  }
6337  if (data_->is_basic(nested_elem_tk)) {
6338  return serialize_nesting_basic_sequence(ser, nested_elem_tk, length, bound);
6339  } else if (nested_elem_tk == TK_ENUM) {
6340  return serialize_nesting_enum_sequence(ser, length, bound);
6341  } else {
6342  return serialize_nesting_bitmask_sequence(ser, length, bound);
6343  }
6344  }
6345  }
6346 
6347  // Elements with all the other types are stored in the complex map.
6348  CORBA::ULong length = 0;
6349  if (!complex_map_.empty()) {
6350  CORBA::ULong largest_index;
6351  if (!get_largest_complex_index(largest_index)) {
6352  return false;
6353  }
6354  length = largest_index + 1;
6355  }
6356  return serialize_complex_sequence(ser, length, bound, elem_type, ext);
6357 }
const ReturnCode_t RETCODE_OK
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
bool get_largest_index_basic(CORBA::ULong &index) const
bool serialize_primitive_sequence(DCPS::Serializer &ser, TypeKind elem_tk, CORBA::ULong size, CORBA::ULong bound) const
const TypeKind TK_STRING16
Definition: TypeObject.h:232
bool serialize_complex_sequence(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const
bool serialize_nesting_enum_sequence(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound) const
bool get_largest_complex_index(CORBA::ULong &index) const
ACE_CDR::ULong ULong
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
const TypeKind TK_STRING8
Definition: TypeObject.h:231
bool serialize_enum_sequence(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bitbound, CORBA::ULong seqbound, const DDS::DynamicType_var &enum_type) const
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
const TypeKind TK_ENUM
Definition: TypeObject.h:238
bool get_largest_index_basic_sequence(CORBA::ULong &index) const
bool is_primitive(TypeKind tk) const
bool serialize_nesting_bitmask_sequence(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bound) const
bool serialize_bitmask_sequence(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bitbound, CORBA::ULong seqbound) const
bool is_basic(TypeKind tk) const
bool serialize_nesting_basic_sequence(DCPS::Serializer &ser, TypeKind nested_elem_tk, CORBA::ULong size, CORBA::ULong bound) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210

◆ serialize_sequence_aggregated_member_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_sequence_aggregated_member_xcdr2 ( DCPS::Serializer ser,
const_sequence_iterator  it,
TypeKind  elem_tk,
bool  optional,
bool  must_understand,
DDS::ExtensibilityKind  extensibility 
) const

Definition at line 7823 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, OpenDDS::DCPS::Serializer::encoding(), DDS::FINAL, DDS::MUTABLE, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_ENUM, and OpenDDS::DCPS::Serializer::write_parameter_id().

7826 {
7827  if (optional && (extensibility == DDS::FINAL || extensibility == DDS::APPENDABLE)) {
7828  if (!(ser << ACE_OutputCDR::from_boolean(true))) {
7829  return false;
7830  }
7831  } else if (extensibility == DDS::MUTABLE) {
7832  const DCPS::Encoding& encoding = ser.encoding();
7833  size_t member_size = 0;
7834  if (data_->is_basic(elem_tk)) {
7835  serialized_size_basic_sequence(encoding, member_size, it);
7836  } else if (elem_tk == TK_ENUM) {
7837  serialized_size_enum_sequence(encoding, member_size, it);
7838  } else if (elem_tk == TK_BITMASK) {
7839  serialized_size_bitmask_sequence(encoding, member_size, it);
7840  } else {
7841  return false;
7842  }
7843  if (!ser.write_parameter_id(it->first, member_size, must_understand)) {
7844  return false;
7845  }
7846  }
7847  if (data_->is_basic(elem_tk)) {
7848  return serialize_basic_sequence(ser, it);
7849  } else if (elem_tk == TK_ENUM) {
7850  return serialize_enum_sequence(ser, it);
7851  } else if (elem_tk == TK_BITMASK) {
7852  return serialize_bitmask_sequence(ser, it);
7853  }
7854  return false;
7855 }
void serialized_size_enum_sequence(const DCPS::Encoding &encoding, size_t &size, const DDS::Int8Seq &seq) const
bool serialize_basic_sequence(DCPS::Serializer &ser, const_sequence_iterator it) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
bool serialize_enum_sequence(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bitbound, CORBA::ULong seqbound, const DDS::DynamicType_var &enum_type) const
const TypeKind TK_ENUM
Definition: TypeObject.h:238
bool serialize_bitmask_sequence(DCPS::Serializer &ser, CORBA::ULong size, CORBA::ULong bitbound, CORBA::ULong seqbound) const
bool serialized_size_basic_sequence(const DCPS::Encoding &encoding, size_t &size, const_sequence_iterator it) const
void serialized_size_bitmask_sequence(const DCPS::Encoding &encoding, size_t &size, const DDS::UInt8Seq &seq) const
bool is_basic(TypeKind tk) const
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialize_sequence_member_default_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_sequence_member_default_value ( DCPS::Serializer ser,
TypeKind  elem_tk 
) const

Definition at line 7522 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::uint32_cdr_size, OpenDDS::DCPS::Serializer::write_delimiter(), OpenDDS::DCPS::Encoding::xcdr_version(), and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

7524 {
7525  // Zero-length sequence
7526  const DCPS::Encoding& encoding = ser.encoding();
7527  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2 && !data_->is_primitive(elem_tk)) {
7528  if (!ser.write_delimiter(2 * DCPS::uint32_cdr_size)) {
7529  return false;
7530  }
7531  }
7532  return ser << static_cast<CORBA::ULong>(0);
7533 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const size_t uint32_cdr_size
Definition: Serializer.h:96
bool is_primitive(TypeKind tk) const

◆ serialize_sequence_struct_member_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_sequence_struct_member_xcdr2 ( DCPS::Serializer ser,
DDS::MemberId  id,
TypeKind  elem_tk,
bool  optional,
bool  must_understand,
DDS::ExtensibilityKind  extensibility,
DCPS::Sample::Extent  ext 
) const

Definition at line 7888 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, OpenDDS::DCPS::Serializer::encoding(), DDS::FINAL, DDS::MUTABLE, and OpenDDS::DCPS::Serializer::write_parameter_id().

7892 {
7893  const DCPS::Encoding& encoding = ser.encoding();
7894  const_sequence_iterator seq_it = sequence_map_.find(id);
7895  const_complex_iterator complex_it = complex_map_.find(id);
7896  if (seq_it == sequence_map_.end() && complex_it == complex_map_.end()) {
7897  if (optional) {
7899  return ser << ACE_OutputCDR::from_boolean(false);
7900  }
7901  return true;
7902  }
7903  if (extensibility == DDS::MUTABLE) {
7904  size_t member_size = 0;
7905  serialized_size_sequence_member_default_value(encoding, member_size, elem_tk);
7906  if (!ser.write_parameter_id(id, member_size, must_understand)) {
7907  return false;
7908  }
7909  }
7910  return serialize_sequence_member_default_value(ser, elem_tk);
7911  }
7912 
7913  if (seq_it != sequence_map_.end()) {
7914  return serialize_sequence_aggregated_member_xcdr2(ser, seq_it, elem_tk, optional,
7915  must_understand, extensibility);
7916  }
7917  return serialize_complex_aggregated_member_xcdr2(ser, complex_it, optional,
7918  must_understand, extensibility, ext);
7919 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_sequence_member_default_value(const DCPS::Encoding &encoding, size_t &size, TypeKind elem_tk) const
bool serialize_complex_aggregated_member_xcdr2(DCPS::Serializer &ser, const_complex_iterator it, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility, DCPS::Sample::Extent ext) const
bool serialize_sequence_aggregated_member_xcdr2(DCPS::Serializer &ser, const_sequence_iterator it, TypeKind elem_tk, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility) const
bool serialize_sequence_member_default_value(DCPS::Serializer &ser, TypeKind elem_tk) const
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialize_sequence_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_sequence_value ( DCPS::Serializer ser,
const SequenceValue sv 
) const

Definition at line 5655 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::SequenceValue::elem_kind_, OpenDDS::XTypes::DynamicDataImpl::SequenceValue::get(), OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

5657 {
5658  switch (sv.elem_kind_) {
5659  case TK_INT32:
5660  return ser << sv.get<DDS::Int32Seq>();
5661  case TK_UINT32:
5662  return ser << sv.get<DDS::UInt32Seq>();
5663  case TK_INT8:
5664  return ser << sv.get<DDS::Int8Seq>();
5665  case TK_UINT8:
5666  return ser << sv.get<DDS::UInt8Seq>();
5667  case TK_INT16:
5668  return ser << sv.get<DDS::Int16Seq>();
5669  case TK_UINT16:
5670  return ser << sv.get<DDS::UInt16Seq>();
5671  case TK_INT64:
5672  return ser << sv.get<DDS::Int64Seq>();
5673  case TK_UINT64:
5674  return ser << sv.get<DDS::UInt64Seq>();
5675  case TK_FLOAT32:
5676  return ser << sv.get<DDS::Float32Seq>();
5677  case TK_FLOAT64:
5678  return ser << sv.get<DDS::Float64Seq>();
5679  case TK_FLOAT128:
5680  return ser << sv.get<DDS::Float128Seq>();
5681  case TK_CHAR8:
5682  return ser << sv.get<DDS::CharSeq>();
5683  case TK_BYTE:
5684  return ser << sv.get<DDS::ByteSeq>();
5685  case TK_BOOLEAN:
5686  return ser << sv.get<DDS::BooleanSeq>();
5687  case TK_STRING8:
5688  return ser << sv.get<DDS::StringSeq>();
5689 #ifdef DDS_HAS_WCHAR
5690  case TK_CHAR16:
5691  return ser << sv.get<DDS::WcharSeq>();
5692  case TK_STRING16:
5693  return ser << sv.get<DDS::WstringSeq>();
5694 #endif
5695  default:
5696  return false;
5697  }
5698 }
sequence< char > CharSeq
const TypeKind TK_INT8
Definition: TypeObject.h:225
sequence< unsigned long > UInt32Seq
sequence< unsigned long long > UInt64Seq
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
sequence< float > Float32Seq
sequence< boolean > BooleanSeq
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
sequence< wchar > WcharSeq
sequence< long long > Int64Seq
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const TypeKind TK_STRING16
Definition: TypeObject.h:232
sequence< string > StringSeq
Definition: DdsDcpsCore.idl:50
sequence< uint8 > UInt8Seq
const TypeKind TK_UINT16
Definition: TypeObject.h:219
sequence< double > Float64Seq
sequence< short > Int16Seq
sequence< long double > Float128Seq
const TypeKind TK_INT64
Definition: TypeObject.h:218
sequence< long > Int32Seq
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
sequence< wstring > WstringSeq
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
sequence< int8 > Int8Seq
const TypeKind TK_INT16
Definition: TypeObject.h:216
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_STRING8
Definition: TypeObject.h:231
sequence< unsigned short > UInt16Seq
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
sequence< octet > ByteSeq

◆ serialize_single_aggregated_member_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_single_aggregated_member_xcdr2 ( DCPS::Serializer ser,
const_single_iterator  it,
const DDS::DynamicType_var &  member_type,
bool  optional,
bool  must_understand,
DDS::ExtensibilityKind  extensibility 
) const

Definition at line 7308 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, OpenDDS::DCPS::Serializer::encoding(), DDS::FINAL, DDS::MUTABLE, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_ENUM, and OpenDDS::DCPS::Serializer::write_parameter_id().

7311 {
7312  if (optional && (extensibility == DDS::FINAL || extensibility == DDS::APPENDABLE)) {
7313  if (!(ser << ACE_OutputCDR::from_boolean(true))) {
7314  return false;
7315  }
7316  } else if (extensibility == DDS::MUTABLE) {
7317  const DCPS::Encoding& encoding = ser.encoding();
7318  const TypeKind member_tk = member_type->get_kind();
7319  size_t member_size = 0;
7320  if (data_->is_basic(member_tk)) {
7321  serialized_size_basic_member(encoding, member_size, member_tk, it);
7322  } else if (member_tk == TK_ENUM) {
7323  serialized_size_enum(encoding, member_size, member_type);
7324  } else if (member_tk == TK_BITMASK) {
7325  serialized_size_bitmask(encoding, member_size, member_type);
7326  } else {
7327  return false;
7328  }
7329  if (!ser.write_parameter_id(it->first, member_size, must_understand)) {
7330  return false;
7331  }
7332  }
7333  return serialize_single_value(ser, it->second);
7334 }
bool serialize_single_value(DCPS::Serializer &ser, const SingleValue &sv) const
bool serialized_size_enum(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &enum_type) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
bool serialized_size_basic_member(const DCPS::Encoding &encoding, size_t &size, TypeKind member_tk, const_single_iterator it) const
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
bool serialized_size_bitmask(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &bitmask_type) const
const TypeKind TK_ENUM
Definition: TypeObject.h:238
bool is_basic(TypeKind tk) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialize_single_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_single_value ( DCPS::Serializer ser,
const SingleValue sv 
) const

Definition at line 4120 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::SingleValue::get(), OpenDDS::XTypes::DynamicDataImpl::SingleValue::kind_, OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

4122 {
4123  switch (sv.kind_) {
4124  case TK_INT32:
4125  return ser << sv.get<CORBA::Long>();
4126  case TK_UINT32:
4127  return ser << sv.get<CORBA::ULong>();
4128  case TK_INT8:
4129  return ser << sv.get<ACE_OutputCDR::from_int8>();
4130  case TK_UINT8:
4131  return ser << sv.get<ACE_OutputCDR::from_uint8>();
4132  case TK_INT16:
4133  return ser << sv.get<CORBA::Short>();
4134  case TK_UINT16:
4135  return ser << sv.get<CORBA::UShort>();
4136  case TK_INT64:
4137  return ser << sv.get<CORBA::LongLong>();
4138  case TK_UINT64:
4139  return ser << sv.get<CORBA::ULongLong>();
4140  case TK_FLOAT32:
4141  return ser << sv.get<CORBA::Float>();
4142  case TK_FLOAT64:
4143  return ser << sv.get<CORBA::Double>();
4144  case TK_FLOAT128:
4145  return ser << sv.get<CORBA::LongDouble>();
4146  case TK_CHAR8:
4147  return ser << sv.get<ACE_OutputCDR::from_char>();
4148  case TK_BYTE:
4149  return ser << sv.get<ACE_OutputCDR::from_octet>();
4150  case TK_BOOLEAN:
4151  return ser << sv.get<ACE_OutputCDR::from_boolean>();
4152  case TK_STRING8:
4153  return ser << sv.get<const char*>();
4154 #ifdef DDS_HAS_WCHAR
4155  case TK_CHAR16:
4156  return ser << sv.get<ACE_OutputCDR::from_wchar>();
4157  case TK_STRING16:
4158  return ser << sv.get<const CORBA::WChar*>();
4159 #endif
4160  default:
4161  return false;
4162  }
4163 }
ACE_CDR::Long Long
const TypeKind TK_INT8
Definition: TypeObject.h:225
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
ACE_CDR::LongLong LongLong
ACE_CDR::Short Short
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const TypeKind TK_STRING16
Definition: TypeObject.h:232
ACE_CDR::ULongLong ULongLong
const TypeKind TK_UINT16
Definition: TypeObject.h:219
ACE_CDR::ULong ULong
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const TypeKind TK_INT16
Definition: TypeObject.h:216
ACE_CDR::UShort UShort
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_STRING8
Definition: TypeObject.h:231
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
ACE_CDR::WChar WChar

◆ serialize_string_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_string_value ( DCPS::Serializer ser) const

◆ serialize_structure()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_structure ( DCPS::Serializer ser,
DCPS::Sample::Extent  ext 
) const

Definition at line 8101 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Encoding::xcdr_version(), OpenDDS::DCPS::Encoding::XCDR_VERSION_1, and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

Referenced by OpenDDS::XTypes::DynamicDataImpl::serialize_i().

8102 {
8103  const DCPS::Encoding& encoding = ser.encoding();
8104  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
8105  return serialize_structure_xcdr2(ser, ext);
8106  } else if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_1) {
8107  return serialize_structure_xcdr1(ser, ext);
8108  }
8109  return false;
8110 }
bool serialize_structure_xcdr2(DCPS::Serializer &ser, DCPS::Sample::Extent ext) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
bool serialize_structure_xcdr1(DCPS::Serializer &ser, DCPS::Sample::Extent ext) const

◆ serialize_structure_xcdr1()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_structure_xcdr1 ( DCPS::Serializer ser,
DCPS::Sample::Extent  ext 
) const

Definition at line 8083 of file DynamicDataImpl.cpp.

8084 {
8085  // TODO: Support only Final & Mutable extensibility?
8086  return false;
8087 }

◆ serialize_structure_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_structure_xcdr2 ( DCPS::Serializer ser,
DCPS::Sample::Extent  ext 
) const

Definition at line 8000 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, OpenDDS::DCPS::Serializer::encoding(), OpenDDS::XTypes::DynamicDataBase::exclude_member(), OpenDDS::XTypes::extensibility(), OpenDDS::XTypes::get_base_type(), OpenDDS::XTypes::DynamicDataBase::has_explicit_keys(), DDS::MUTABLE, OpenDDS::XTypes::DynamicDataBase::nested(), DDS::RETCODE_OK, struct_has_explicit_keys(), OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::DynamicDataBase::type_, and OpenDDS::DCPS::Serializer::write_delimiter().

8001 {
8002  DDS::TypeDescriptor_var descriptor;
8003  if (type_->get_descriptor(descriptor) != DDS::RETCODE_OK) {
8004  return false;
8005  }
8006  const DDS::ExtensibilityKind extensibility = descriptor->extensibility_kind();
8008 
8009  // Delimiter
8010  const DCPS::Encoding& encoding = ser.encoding();
8011  size_t total_size = 0;
8012  if (extensibility == DDS::APPENDABLE || extensibility == DDS::MUTABLE) {
8013  if (!data_->serialized_size_i(encoding, total_size, ext) || !ser.write_delimiter(total_size)) {
8014  return false;
8015  }
8016  }
8017 
8018  // Members
8019  const CORBA::ULong member_count = type_->get_member_count();
8020  for (CORBA::ULong i = 0; i < member_count; ++i) {
8021  DDS::DynamicTypeMember_var dtm;
8022  if (type_->get_member_by_index(dtm, i) != DDS::RETCODE_OK) {
8023  return false;
8024  }
8025  DDS::MemberDescriptor_var md;
8026  if (dtm->get_descriptor(md) != DDS::RETCODE_OK) {
8027  return false;
8028  }
8029 
8030  if (exclude_member(ext, md->is_key(), struct_has_explicit_keys)) {
8031  continue;
8032  }
8033 
8034  const DDS::MemberId id = md->id();
8035  const CORBA::Boolean optional = md->is_optional();
8036  const CORBA::Boolean must_understand = md->is_must_understand();
8037  const DDS::DynamicType_var member_type = get_base_type(md->type());
8038  const TypeKind member_tk = member_type->get_kind();
8039 
8040  if (data_->is_basic(member_tk) || member_tk == TK_ENUM || member_tk == TK_BITMASK) {
8041  if (!serialize_basic_struct_member_xcdr2(ser, id, member_type, optional,
8042  must_understand, extensibility)) {
8043  return false;
8044  }
8045  continue;
8046  } else if (member_tk == TK_SEQUENCE) {
8047  DDS::TypeDescriptor_var member_td;
8048  if (member_type->get_descriptor(member_td) != DDS::RETCODE_OK) {
8049  return false;
8050  }
8051  const DDS::DynamicType_var elem_type = get_base_type(member_td->element_type());
8052  const TypeKind elem_tk = elem_type->get_kind();
8053  if (data_->is_basic(elem_tk) || elem_tk == TK_ENUM || elem_tk == TK_BITMASK) {
8054  if (!serialize_sequence_struct_member_xcdr2(ser, id, elem_tk, optional,
8055  must_understand, extensibility, nested(ext))) {
8056  return false;
8057  }
8058  continue;
8059  }
8060  }
8061 
8062  const_complex_iterator it = complex_map_.find(id);
8063  if (it != complex_map_.end()) {
8064  if (!serialize_complex_aggregated_member_xcdr2(ser, it, optional,
8065  must_understand, extensibility, nested(ext))) {
8066  return false;
8067  }
8068  } else if (!serialize_complex_aggregated_member_xcdr2_default(ser, id, member_type, optional,
8069  must_understand, extensibility, nested(ext))) {
8070  return false;
8071  }
8072  }
8073  return true;
8074 }
ACE_CDR::ULong MemberId
Definition: TypeObject.h:910
bool serialize_complex_aggregated_member_xcdr2_default(DCPS::Serializer &ser, DDS::MemberId id, const DDS::DynamicType_var &member_type, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility, DCPS::Sample::Extent ext) const
const ReturnCode_t RETCODE_OK
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
static bool has_explicit_keys(DDS::DynamicType *dt)
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULong ULong
bool struct_has_explicit_keys(AST_Structure *node)
ACE_CDR::Boolean Boolean
bool serialize_sequence_struct_member_xcdr2(DCPS::Serializer &ser, DDS::MemberId id, TypeKind elem_tk, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility, DCPS::Sample::Extent ext) const
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
const TypeKind TK_ENUM
Definition: TypeObject.h:238
bool serialize_complex_aggregated_member_xcdr2(DCPS::Serializer &ser, const_complex_iterator it, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility, DCPS::Sample::Extent ext) const
static DCPS::Sample::Extent nested(DCPS::Sample::Extent ext)
bool serialized_size_i(const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
static bool exclude_member(DCPS::Sample::Extent ext, bool is_key, bool has_explicit_keys)
bool is_basic(TypeKind tk) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29
ExtensibilityKind
bool serialize_basic_struct_member_xcdr2(DCPS::Serializer &ser, DDS::MemberId id, const DDS::DynamicType_var &member_type, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility) const

◆ serialize_union()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_union ( DCPS::Serializer ser,
DCPS::Sample::Extent  ext 
) const

Definition at line 8620 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Encoding::xcdr_version(), OpenDDS::DCPS::Encoding::XCDR_VERSION_1, and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

Referenced by OpenDDS::XTypes::DynamicDataImpl::serialize_i().

8621 {
8622  const DCPS::Encoding& encoding = ser.encoding();
8623  if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_2) {
8624  return serialize_union_xcdr2(ser, ext);
8625  } else if (encoding.xcdr_version() == DCPS::Encoding::XCDR_VERSION_1) {
8626  return serialize_union_xcdr1(ser, ext);
8627  }
8628  return false;
8629 }
bool serialize_union_xcdr1(DCPS::Serializer &ser, DCPS::Sample::Extent ext) const
bool serialize_union_xcdr2(DCPS::Serializer &ser, DCPS::Sample::Extent ext) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)

◆ serialize_union_xcdr1()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_union_xcdr1 ( DCPS::Serializer ser,
DCPS::Sample::Extent  ext 
) const

Definition at line 8602 of file DynamicDataImpl.cpp.

8603 {
8604  // TODO:
8605  return false;
8606 }

◆ serialize_union_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_union_xcdr2 ( DCPS::Serializer ser,
DCPS::Sample::Extent  ext 
) const

Definition at line 8498 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, OpenDDS::XTypes::DISCRIMINATOR_ID, OpenDDS::DCPS::Serializer::encoding(), OpenDDS::XTypes::extensibility(), OpenDDS::DCPS::Sample::Full, OpenDDS::XTypes::get_base_type(), OpenDDS::XTypes::DynamicDataBase::has_explicit_keys(), OpenDDS::DCPS::Sample::KeyOnly, OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::MUTABLE, DDS::RETCODE_OK, OpenDDS::XTypes::DynamicDataBase::type_, OpenDDS::DCPS::Serializer::write_delimiter(), and OpenDDS::DCPS::Serializer::write_parameter_id().

8499 {
8500  if (ext == DCPS::Sample::KeyOnly && !has_explicit_keys(type_)) {
8501  // nothing is serialized (not even a delimiter) for key-only serialization when there is no @key
8502  return true;
8503  }
8504 
8505  DDS::TypeDescriptor_var descriptor;
8506  if (type_->get_descriptor(descriptor) != DDS::RETCODE_OK) {
8507  return false;
8508  }
8509  const DDS::ExtensibilityKind extensibility = descriptor->extensibility_kind();
8510 
8511  // Delimiter
8512  const DCPS::Encoding& encoding = ser.encoding();
8513  size_t total_size = 0;
8514  if (extensibility == DDS::APPENDABLE || extensibility == DDS::MUTABLE) {
8515  if (!data_->serialized_size_i(encoding, total_size, ext) || !ser.write_delimiter(total_size)) {
8516  return false;
8517  }
8518  }
8519 
8520  const_single_iterator single_it = single_map_.find(DISCRIMINATOR_ID);
8521  const_complex_iterator complex_it = complex_map_.find(DISCRIMINATOR_ID);
8522  const bool has_disc = single_it != single_map_.end() || complex_it != complex_map_.end();
8523  const DDS::MemberId selected_id = data_->find_selected_member();
8524  DDS::DynamicType_var disc_type = get_base_type(descriptor->discriminator_type());
8525  const TypeKind disc_tk = disc_type->get_kind();
8526 
8527  // Read the discriminator value if the user already set it. Otherwise,
8528  // set it to the default value of the corresponding type.
8529  CORBA::Long disc_value;
8530  if (has_disc) {
8531  if (!get_discriminator_value(disc_value, single_it, complex_it, disc_type)) {
8532  return false;
8533  }
8534  } else if (!set_default_discriminator_value(disc_value, disc_type)) {
8535  return false;
8536  }
8537 
8538  if (selected_id == MEMBER_ID_INVALID) {
8539  // If the defined discriminator value selects a member, serialize the member with
8540  // its default value. Otherwise, serialize only the discriminator.
8541  bool found_selected_member = false;
8542  DDS::MemberDescriptor_var selected_md;
8543  if (!select_union_member(disc_value, found_selected_member, selected_md)) {
8544  return false;
8545  }
8546  // Discriminator
8547  if (!serialize_discriminator_member_xcdr2(ser, disc_value, disc_type, extensibility)) {
8548  return false;
8549  }
8550  // Selected member
8551  if (found_selected_member) {
8552  DDS::DynamicType_var selected_type = get_base_type(selected_md->type());
8553  const DDS::MemberId id = selected_md->id();
8554  const bool optional = selected_md->is_optional();
8555  const bool must_understand = selected_md->is_must_understand();
8556  return serialize_complex_aggregated_member_xcdr2_default(ser, id, selected_type, optional,
8557  must_understand, extensibility,
8559  }
8560  return true;
8561  }
8562 
8563  // Both discriminator and a selected member exist in the data container.
8564  if (single_it != single_map_.end()) {
8565  if (extensibility == DDS::MUTABLE) {
8566  size_t disc_size = 0;
8567  if (data_->is_primitive(disc_tk)) {
8568  serialized_size_primitive_member(encoding, disc_size, disc_tk);
8569  } else { // Enum is the only other type can be used for discriminator
8570  serialized_size_enum(encoding, disc_size, disc_type);
8571  }
8572  // Discriminator always has Id 0?
8573  if (!ser.write_parameter_id(0, disc_size, false)) {
8574  return false;
8575  }
8576  }
8577  if (!serialize_single_value(ser, single_it->second)) {
8578  return false;
8579  }
8580  } else {
8581  if (extensibility == DDS::MUTABLE) {
8582  size_t disc_size = 0;
8583  serialized_size_complex_member_i(encoding, disc_size, complex_it->first, DCPS::Sample::Full);
8584  if (!ser.write_parameter_id(0, disc_size, false)) {
8585  return false;
8586  }
8587  }
8588  if (!serialize_complex_member_i(ser, complex_it->first, DCPS::Sample::Full)) {
8589  return false;
8590  }
8591  }
8592  return serialize_selected_member_xcdr2(ser, selected_id, extensibility);
8593 }
ACE_CDR::Long Long
ACE_CDR::ULong MemberId
Definition: TypeObject.h:910
bool serialize_complex_aggregated_member_xcdr2_default(DCPS::Serializer &ser, DDS::MemberId id, const DDS::DynamicType_var &member_type, bool optional, bool must_understand, DDS::ExtensibilityKind extensibility, DCPS::Sample::Extent ext) const
const ReturnCode_t RETCODE_OK
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
const ACE_CDR::ULong DISCRIMINATOR_ID
Implementation specific sentinel for a union discriminator used in DynamicData.
Definition: TypeObject.h:913
static bool has_explicit_keys(DDS::DynamicType *dt)
bool serialize_single_value(DCPS::Serializer &ser, const SingleValue &sv) const
bool serialized_size_complex_member_i(const DCPS::Encoding &encoding, size_t &size, DDS::MemberId id, DCPS::Sample::Extent ext) const
bool serialized_size_enum(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &enum_type) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
bool serialize_complex_member_i(DCPS::Serializer &ser, DDS::MemberId id, DCPS::Sample::Extent ext) const
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
bool select_union_member(CORBA::Long disc_value, bool &found_selected_member, DDS::MemberDescriptor_var &selected_md) const
bool set_default_discriminator_value(CORBA::Long &value, const DDS::DynamicType_var &disc_type) const
DDS::MemberId find_selected_member() const
bool is_primitive(TypeKind tk) const
bool serialized_size_i(const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
bool serialize_selected_member_xcdr2(DCPS::Serializer &ser, DDS::MemberId selected_id, DDS::ExtensibilityKind extensibility) const
bool serialized_size_primitive_member(const DCPS::Encoding &encoding, size_t &size, TypeKind member_tk) const
bool get_discriminator_value(CORBA::Long &value, const_single_iterator single_it, const_complex_iterator complex_it, const DDS::DynamicType_var &disc_type) const
bool serialize_discriminator_member_xcdr2(DCPS::Serializer &ser, CORBA::Long value, const DDS::DynamicType_var &disc_type, DDS::ExtensibilityKind extensibility) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29
ExtensibilityKind

◆ serialize_wstring_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_wstring_value ( DCPS::Serializer ser) const

◆ serialized_size_array()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_array ( const DCPS::Encoding encoding,
size_t &  size,
DCPS::Sample::Extent  ext 
) const

Definition at line 6995 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataBase::bound_total(), OpenDDS::STUN::encoding(), OpenDDS::XTypes::get_base_type(), OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::RETCODE_OK, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by OpenDDS::XTypes::DynamicDataImpl::serialized_size_i().

6998 {
6999  DDS::TypeDescriptor_var descriptor;
7000  if (type_->get_descriptor(descriptor) != DDS::RETCODE_OK) {
7001  return false;
7002  }
7003 
7004  const DDS::DynamicType_var elem_type = get_base_type(descriptor->element_type());
7005  const TypeKind elem_tk = elem_type->get_kind();
7006  DDS::TypeDescriptor_var elem_td;
7007  if (elem_type->get_descriptor(elem_td) != DDS::RETCODE_OK) {
7008  return false;
7009  }
7010 
7011  const CORBA::ULong length = bound_total(descriptor);
7012  if (data_->is_basic(elem_tk)) {
7013  serialized_size_primitive_array(encoding, size, elem_tk, length);
7014  return true;
7015  } else if (elem_tk == TK_STRING8) {
7016  IndexToIdMap index_to_id(length, MEMBER_ID_INVALID);
7017  if (!get_index_to_id_map(index_to_id, length)) {
7018  return false;
7019  }
7020  return serialized_size_generic_string_array<const char*>(encoding, size, index_to_id);
7021  } else if (elem_tk == TK_STRING16) {
7022 #ifdef DDS_HAS_WCHAR
7023  IndexToIdMap index_to_id(length, MEMBER_ID_INVALID);
7024  if (!get_index_to_id_map(index_to_id, length)) {
7025  return false;
7026  }
7027  return serialized_size_generic_string_array<const CORBA::WChar*>(encoding, size, index_to_id);
7028 #else
7029  return false;
7030 #endif
7031  } else if (elem_tk == TK_ENUM) {
7032  const CORBA::ULong bit_bound = elem_td->bound()[0];
7033  serialized_size_enum_array(encoding, size, length, bit_bound);
7034  return true;
7035  } else if (elem_tk == TK_BITMASK) {
7036  const CORBA::ULong bit_bound = elem_td->bound()[0];
7037  serialized_size_bitmask_array(encoding, size, length, bit_bound);
7038  return true;
7039  } else if (elem_tk == TK_SEQUENCE) {
7040  const DDS::DynamicType_var nested_elem_type = get_base_type(elem_td->element_type());
7041  const TypeKind nested_elem_tk = nested_elem_type->get_kind();
7042  IndexToIdMap index_to_id(length, MEMBER_ID_INVALID);
7043  if (!get_index_to_id_map(index_to_id, length)) {
7044  return false;
7045  }
7046  if (data_->is_basic(nested_elem_tk)) {
7047  return serialized_size_nesting_basic_array(encoding, size, nested_elem_tk, index_to_id);
7048  } else if (nested_elem_tk == TK_ENUM) {
7049  return serialized_size_nesting_enum_array(encoding, size, index_to_id);
7050  } else if (nested_elem_tk == TK_BITMASK) {
7051  return serialized_size_nesting_bitmask_array(encoding, size, index_to_id);
7052  }
7053  }
7054 
7055  // Elements stored in complex map
7056  IndexToIdMap index_to_id;
7057  if (!get_index_to_id_from_complex(index_to_id, length)) {
7058  return false;
7059  }
7060  return serialized_size_complex_array(encoding, size, index_to_id, elem_type, ext);
7061 }
bool get_index_to_id_from_complex(IndexToIdMap &index_to_id, CORBA::ULong bound) const
bool serialized_size_complex_array(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const
bool serialized_size_nesting_basic_array(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, SequenceType protoseq) const
const ReturnCode_t RETCODE_OK
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_primitive_array(const DCPS::Encoding &encoding, size_t &size, TypeKind elem_tk, CORBA::ULong length) const
static CORBA::ULong bound_total(DDS::TypeDescriptor_var descriptor)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
void serialized_size_enum_array(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length, CORBA::ULong bitbound) const
bool serialized_size_nesting_bitmask_array(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
const TypeKind TK_STRING8
Definition: TypeObject.h:231
void serialized_size_bitmask_array(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length, CORBA::ULong bitbound) const
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
const TypeKind TK_ENUM
Definition: TypeObject.h:238
bool serialized_size_nesting_enum_array(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
bool get_index_to_id_map(IndexToIdMap &index_to_id, CORBA::ULong bound) const
bool is_basic(TypeKind tk) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210

◆ serialized_size_basic_member()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_basic_member ( const DCPS::Encoding encoding,
size_t &  size,
TypeKind  member_tk,
const_single_iterator  it 
) const

Definition at line 7179 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_STRING16, and OpenDDS::XTypes::TK_STRING8.

7181 {
7182  if (data_->is_primitive(member_tk)) {
7183  return serialized_size_primitive_member(encoding, size, member_tk);
7184  } else if (member_tk == TK_STRING8 || member_tk == TK_STRING16) {
7185  serialized_size_string_common(encoding, size, it->second);
7186  return true;
7187  }
7188  return false;
7189 }
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const TypeKind TK_STRING8
Definition: TypeObject.h:231
bool is_primitive(TypeKind tk) const
bool serialized_size_primitive_member(const DCPS::Encoding &encoding, size_t &size, TypeKind member_tk) const
void serialized_size_string_common(const DCPS::Encoding &encoding, size_t &size, const char *str) const

◆ serialized_size_basic_member_default_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_basic_member_default_value ( const DCPS::Encoding encoding,
size_t &  size,
TypeKind  member_tk 
) const

Definition at line 7156 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_STRING16, and OpenDDS::XTypes::TK_STRING8.

7158 {
7159  if (data_->is_primitive(member_tk)) {
7160  return serialized_size_primitive_member(encoding, size, member_tk);
7161  } else if (member_tk == TK_STRING8) {
7162  const char* str_default;
7163  set_default_basic_value(str_default);
7164  serialized_size_string_common(encoding, size, str_default);
7165  return true;
7166  }
7167 #ifdef DDS_HAS_WCHAR
7168  else if (member_tk == TK_STRING16) {
7169  const CORBA::WChar* wstr_default;
7170  set_default_basic_value(wstr_default);
7171  serialized_size_string_common(encoding, size, wstr_default);
7172  return true;
7173  }
7174 #endif
7175  return false;
7176 }
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const TypeKind TK_STRING8
Definition: TypeObject.h:231
void set_default_basic_value(CORBA::Long &value) const
bool is_primitive(TypeKind tk) const
ACE_CDR::WChar WChar
bool serialized_size_primitive_member(const DCPS::Encoding &encoding, size_t &size, TypeKind member_tk) const
void serialized_size_string_common(const DCPS::Encoding &encoding, size_t &size, const char *str) const

◆ serialized_size_basic_sequence()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_basic_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const_sequence_iterator  it 
) const

Definition at line 7535 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::serialized_size(), OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

7537 {
7538  switch (it->second.elem_kind_) {
7539  case TK_INT32: {
7540  const DDS::Int32Seq& seq = it->second.get<DDS::Int32Seq>();
7541  serialized_size(encoding, size, seq);
7542  return true;
7543  }
7544  case TK_UINT32: {
7545  const DDS::UInt32Seq& seq = it->second.get<DDS::UInt32Seq>();
7546  serialized_size(encoding, size, seq);
7547  return true;
7548  }
7549  case TK_INT8: {
7550  const DDS::Int8Seq& seq = it->second.get<DDS::Int8Seq>();
7551  serialized_size(encoding, size, seq);
7552  return true;
7553  }
7554  case TK_UINT8: {
7555  const DDS::UInt8Seq& seq = it->second.get<DDS::UInt8Seq>();
7556  serialized_size(encoding, size, seq);
7557  return true;
7558  }
7559  case TK_INT16: {
7560  const DDS::Int16Seq& seq = it->second.get<DDS::Int16Seq>();
7561  serialized_size(encoding, size, seq);
7562  return true;
7563  }
7564  case TK_UINT16: {
7565  const DDS::UInt16Seq& seq = it->second.get<DDS::UInt16Seq>();
7566  serialized_size(encoding, size, seq);
7567  return true;
7568  }
7569  case TK_INT64: {
7570  const DDS::Int64Seq& seq = it->second.get<DDS::Int64Seq>();
7571  serialized_size(encoding, size, seq);
7572  return true;
7573  }
7574  case TK_UINT64: {
7575  const DDS::UInt64Seq& seq = it->second.get<DDS::UInt64Seq>();
7576  serialized_size(encoding, size, seq);
7577  return true;
7578  }
7579  case TK_FLOAT32: {
7580  const DDS::Float32Seq& seq = it->second.get<DDS::Float32Seq>();
7581  serialized_size(encoding, size, seq);
7582  return true;
7583  }
7584  case TK_FLOAT64: {
7585  const DDS::Float64Seq& seq = it->second.get<DDS::Float64Seq>();
7586  serialized_size(encoding, size, seq);
7587  return true;
7588  }
7589  case TK_FLOAT128: {
7590  const DDS::Float128Seq& seq = it->second.get<DDS::Float128Seq>();
7591  serialized_size(encoding, size, seq);
7592  return true;
7593  }
7594  case TK_CHAR8: {
7595  const DDS::CharSeq& seq = it->second.get<DDS::CharSeq>();
7596  serialized_size(encoding, size, seq);
7597  return true;
7598  }
7599  case TK_BYTE: {
7600  const DDS::ByteSeq& seq = it->second.get<DDS::ByteSeq>();
7601  serialized_size(encoding, size, seq);
7602  return true;
7603  }
7604  case TK_BOOLEAN: {
7605  const DDS::BooleanSeq& seq = it->second.get<DDS::BooleanSeq>();
7606  serialized_size(encoding, size, seq);
7607  return true;
7608  }
7609  case TK_STRING8: {
7610  const DDS::StringSeq& seq = it->second.get<DDS::StringSeq>();
7611  serialized_size(encoding, size, seq);
7612  return true;
7613  }
7614 #ifdef DDS_HAS_WCHAR
7615  case TK_CHAR16: {
7616  const DDS::WcharSeq& seq = it->second.get<DDS::WcharSeq>();
7617  serialized_size(encoding, size, seq);
7618  return true;
7619  }
7620  case TK_STRING16: {
7621  const DDS::WstringSeq& seq = it->second.get<DDS::WstringSeq>();
7622  serialized_size(encoding, size, seq);
7623  return true;
7624  }
7625 #endif
7626  }
7627  return false;
7628 }
sequence< char > CharSeq
const TypeKind TK_INT8
Definition: TypeObject.h:225
sequence< unsigned long > UInt32Seq
sequence< unsigned long long > UInt64Seq
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
sequence< float > Float32Seq
sequence< boolean > BooleanSeq
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
sequence< wchar > WcharSeq
sequence< long long > Int64Seq
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const TypeKind TK_STRING16
Definition: TypeObject.h:232
sequence< string > StringSeq
Definition: DdsDcpsCore.idl:50
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
sequence< uint8 > UInt8Seq
const TypeKind TK_UINT16
Definition: TypeObject.h:219
sequence< double > Float64Seq
sequence< short > Int16Seq
sequence< long double > Float128Seq
const TypeKind TK_INT64
Definition: TypeObject.h:218
sequence< long > Int32Seq
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
sequence< wstring > WstringSeq
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
sequence< int8 > Int8Seq
const TypeKind TK_INT16
Definition: TypeObject.h:216
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_STRING8
Definition: TypeObject.h:231
sequence< unsigned short > UInt16Seq
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
bool serialized_size(const Encoding &encoding, size_t &size, const KeyOnly< const XTypes::DynamicDataImpl > &key)
sequence< octet > ByteSeq

◆ serialized_size_basic_struct_member_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_basic_struct_member_xcdr2 ( const DCPS::Encoding encoding,
size_t &  size,
DDS::MemberId  id,
const DDS::DynamicType_var &  member_type,
bool  optional,
DDS::ExtensibilityKind  extensibility,
size_t &  mutable_running_total 
) const

Definition at line 7427 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, DDS::FINAL, OpenDDS::DCPS::Sample::Full, DDS::MUTABLE, OpenDDS::DCPS::primitive_serialized_size_boolean(), OpenDDS::DCPS::serialized_size_parameter_id(), and OpenDDS::XTypes::TK_ENUM.

7431 {
7432  const TypeKind member_tk = member_type->get_kind();
7433  const_single_iterator single_it = single_map_.find(id);
7434  const_complex_iterator complex_it = complex_map_.find(id);
7435  if (single_it == single_map_.end() && complex_it == complex_map_.end()) {
7436  if (optional) {
7439  }
7440  return true;
7441  }
7442  if (extensibility == DDS::MUTABLE) {
7443  serialized_size_parameter_id(encoding, size, mutable_running_total);
7444  }
7445  if (data_->is_basic(member_tk)) {
7446  return serialized_size_basic_member_default_value(encoding, size, member_tk);
7447  } else if (member_tk == TK_ENUM) {
7448  return serialized_size_enum(encoding, size, member_type);
7449  } else { // Bitmask
7450  return serialized_size_bitmask(encoding, size, member_type);
7451  }
7452  }
7453 
7454  if (single_it != single_map_.end()) {
7455  return serialized_size_single_aggregated_member_xcdr2(encoding, size, single_it, member_type,
7456  optional, extensibility, mutable_running_total);
7457  }
7458  return serialized_size_complex_aggregated_member_xcdr2(encoding, size, complex_it, optional,
7459  extensibility, mutable_running_total,
7461 }
bool serialized_size_basic_member_default_value(const DCPS::Encoding &encoding, size_t &size, TypeKind member_tk) const
bool serialized_size_single_aggregated_member_xcdr2(const DCPS::Encoding &encoding, size_t &size, const_single_iterator it, const DDS::DynamicType_var &member_type, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total) const
bool serialized_size_enum(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &enum_type) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
bool serialized_size_complex_aggregated_member_xcdr2(const DCPS::Encoding &encoding, size_t &size, const_complex_iterator it, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total, DCPS::Sample::Extent ext) const
bool serialized_size_bitmask(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &bitmask_type) const
OpenDDS_Dcps_Export void serialized_size_parameter_id(const Encoding &encoding, size_t &size, size_t &running_size)
const TypeKind TK_ENUM
Definition: TypeObject.h:238
OpenDDS_Dcps_Export void primitive_serialized_size_boolean(const Encoding &encoding, size_t &size, size_t count=1)
bool is_basic(TypeKind tk) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialized_size_bitmask()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask ( const DCPS::Encoding encoding,
size_t &  size,
const DDS::DynamicType_var &  bitmask_type 
) const

Definition at line 4235 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), and DDS::RETCODE_OK.

Referenced by OpenDDS::XTypes::DynamicDataImpl::serialized_size_i().

4237 {
4238  DDS::TypeDescriptor_var bitmask_td;
4239  if (bitmask_type->get_descriptor(bitmask_td) != DDS::RETCODE_OK) {
4240  return false;
4241  }
4242  const CORBA::ULong bit_bound = bitmask_td->bound()[0];
4243  if (bit_bound >= 1 && bit_bound <= 8) {
4244  primitive_serialized_size_uint8(encoding, size);
4245  return true;
4246  } else if (bit_bound >= 9 && bit_bound <= 16) {
4248  } else if (bit_bound >= 17 && bit_bound <= 32) {
4250  } else if (bit_bound >= 33 && bit_bound <= 64) {
4252  }
4253  return false;
4254 }
const ReturnCode_t RETCODE_OK
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULongLong ULongLong
ACE_CDR::ULong ULong
ACE_CDR::UShort UShort
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_bitmask_array()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_array ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length,
CORBA::ULong  bitbound 
) const

Definition at line 6761 of file DynamicDataImpl.cpp.

6763 {
6764  if (bitbound >= 1 && bitbound <= 8) {
6766  } else if (bitbound >= 9 && bitbound <= 16) {
6768  } else if (bitbound >= 17 && bitbound <= 32) {
6770  } else { // from 33 to 64
6772  }
6773 }
void serialized_size_bitmask_array_as_uint8s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_bitmask_array_as_uint32s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
void serialized_size_bitmask_array_as_uint16s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
void serialized_size_bitmask_array_as_uint64s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialized_size_bitmask_array_as_uint16s()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_array_as_uint16s ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length 
) const

Definition at line 6672 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), and OpenDDS::DCPS::serialized_size_delimiter().

6674 {
6677 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
ACE_CDR::UShort UShort
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_bitmask_array_as_uint32s()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_array_as_uint32s ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length 
) const

Definition at line 6702 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), and OpenDDS::DCPS::serialized_size_delimiter().

6704 {
6707 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULong ULong
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_bitmask_array_as_uint64s()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_array_as_uint64s ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length 
) const

Definition at line 6732 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), and OpenDDS::DCPS::serialized_size_delimiter().

6734 {
6737 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULongLong ULongLong
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_bitmask_array_as_uint8s()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_array_as_uint8s ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length 
) const

Definition at line 6642 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::serialized_size_delimiter().

6644 {
6646  primitive_serialized_size_uint8(encoding, size, length);
6647 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.

◆ serialized_size_bitmask_sequence() [1/6]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const DDS::UInt8Seq seq 
) const

Definition at line 5387 of file DynamicDataImpl.cpp.

5389 {
5391 }
void serialized_size_bitmask_sequence_as_uint8s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)

◆ serialized_size_bitmask_sequence() [2/6]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const DDS::UInt16Seq seq 
) const

Definition at line 5434 of file DynamicDataImpl.cpp.

5436 {
5438 }
void serialized_size_bitmask_sequence_as_uint16s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)

◆ serialized_size_bitmask_sequence() [3/6]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const DDS::UInt32Seq seq 
) const

Definition at line 5481 of file DynamicDataImpl.cpp.

5483 {
5485 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_bitmask_sequence_as_uint32s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialized_size_bitmask_sequence() [4/6]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const DDS::UInt64Seq seq 
) const

Definition at line 5528 of file DynamicDataImpl.cpp.

5530 {
5532 }
void serialized_size_bitmask_sequence_as_uint64s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)

◆ serialized_size_bitmask_sequence() [5/6]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_sequence ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length,
CORBA::ULong  bitbound 
) const

Definition at line 5563 of file DynamicDataImpl.cpp.

5565 {
5566  if (bitbound >= 1 && bitbound <= 8) {
5568  } else if (bitbound >= 9 && bitbound <= 16) {
5570  } else if (bitbound >= 17 && bitbound <= 32) {
5572  } else { // from 33 to 64
5574  }
5575 }
void serialized_size_bitmask_sequence_as_uint64s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
void serialized_size_bitmask_sequence_as_uint8s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
void serialized_size_bitmask_sequence_as_uint16s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_bitmask_sequence_as_uint32s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialized_size_bitmask_sequence() [6/6]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const_sequence_iterator  it 
) const

Definition at line 7751 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

7753 {
7754  switch (it->second.elem_kind_) {
7755  case TK_UINT8: {
7756  const DDS::UInt8Seq& seq = it->second.get<DDS::UInt8Seq>();
7758  return true;
7759  }
7760  case TK_UINT16: {
7761  const DDS::UInt16Seq& seq = it->second.get<DDS::UInt16Seq>();
7763  return true;
7764  }
7765  case TK_UINT32: {
7766  const DDS::UInt32Seq& seq = it->second.get<DDS::UInt32Seq>();
7768  return true;
7769  }
7770  case TK_UINT64: {
7771  const DDS::UInt64Seq& seq = it->second.get<DDS::UInt64Seq>();
7773  return true;
7774  }
7775  }
7776  return false;
7777 }
sequence< unsigned long > UInt32Seq
sequence< unsigned long long > UInt64Seq
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
sequence< uint8 > UInt8Seq
const TypeKind TK_UINT16
Definition: TypeObject.h:219
const TypeKind TK_UINT8
Definition: TypeObject.h:226
sequence< unsigned short > UInt16Seq
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_UINT64
Definition: TypeObject.h:221
void serialized_size_bitmask_sequence(const DCPS::Encoding &encoding, size_t &size, const DDS::UInt8Seq &seq) const

◆ serialized_size_bitmask_sequence_as_uint16s()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_sequence_as_uint16s ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length 
) const

Definition at line 5423 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

5425 {
5428  if (length == 0) {
5429  return;
5430  }
5432 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
ACE_CDR::UShort UShort
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_bitmask_sequence_as_uint32s()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_sequence_as_uint32s ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length 
) const

Definition at line 5470 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

5472 {
5475  if (length == 0) {
5476  return;
5477  }
5479 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
ACE_CDR::ULong ULong
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_bitmask_sequence_as_uint64s()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_sequence_as_uint64s ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length 
) const

Definition at line 5517 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

5519 {
5522  if (length == 0) {
5523  return;
5524  }
5526 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULongLong ULongLong
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_bitmask_sequence_as_uint8s()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask_sequence_as_uint8s ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length 
) const

Definition at line 5376 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

5378 {
5381  if (length == 0) {
5382  return;
5383  }
5384  primitive_serialized_size_uint8(encoding, size, length);
5385 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.

◆ serialized_size_complex_aggregated_member_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_complex_aggregated_member_xcdr2 ( const DCPS::Encoding encoding,
size_t &  size,
const_complex_iterator  it,
bool  optional,
DDS::ExtensibilityKind  extensibility,
size_t &  mutable_running_total,
DCPS::Sample::Extent  ext 
) const

Definition at line 7382 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, DDS::FINAL, DDS::MUTABLE, OpenDDS::DCPS::primitive_serialized_size_boolean(), OpenDDS::XTypes::DynamicDataImpl::serialized_size_i(), and OpenDDS::DCPS::serialized_size_parameter_id().

7386 {
7387  const DDS::DynamicData_var& data_var = it->second;
7388  const DynamicDataImpl* data_impl = dynamic_cast<DynamicDataImpl*>(data_var.in());
7389  if (!data_impl) {
7390  return false;
7391  }
7392 
7393  if (optional && (extensibility == DDS::FINAL || extensibility == DDS::APPENDABLE)) {
7395  } else if (extensibility == DDS::MUTABLE) {
7396  serialized_size_parameter_id(encoding, size, mutable_running_total);
7397  }
7398  return data_impl->serialized_size_i(encoding, size, ext);
7399 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
DynamicDataImpl(DDS::DynamicType_ptr type)
OpenDDS_Dcps_Export void serialized_size_parameter_id(const Encoding &encoding, size_t &size, size_t &running_size)
OpenDDS_Dcps_Export void primitive_serialized_size_boolean(const Encoding &encoding, size_t &size, size_t count=1)
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialized_size_complex_aggregated_member_xcdr2_default()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_complex_aggregated_member_xcdr2_default ( const DCPS::Encoding encoding,
size_t &  size,
const DDS::DynamicType_var &  member_type,
bool  optional,
DDS::ExtensibilityKind  extensibility,
size_t &  mutable_running_total,
DCPS::Sample::Extent  ext 
) const

Definition at line 7339 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, OpenDDS::XTypes::DynamicDataImpl::DynamicDataImpl(), DDS::FINAL, DDS::MUTABLE, OpenDDS::DCPS::primitive_serialized_size_boolean(), and OpenDDS::DCPS::serialized_size_parameter_id().

7343 {
7344  if (optional) {
7347  }
7348  return true;
7349  }
7350  if (extensibility == DDS::MUTABLE) {
7351  serialized_size_parameter_id(encoding, size, mutable_running_total);
7352  }
7353 
7354  return DynamicDataImpl(member_type).serialized_size_i(encoding, size, ext);
7355 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
DynamicDataImpl(DDS::DynamicType_ptr type)
OpenDDS_Dcps_Export void serialized_size_parameter_id(const Encoding &encoding, size_t &size, size_t &running_size)
OpenDDS_Dcps_Export void primitive_serialized_size_boolean(const Encoding &encoding, size_t &size, size_t count=1)
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialized_size_complex_array()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_complex_array ( const DCPS::Encoding encoding,
size_t &  size,
const IndexToIdMap &  index_to_id,
const DDS::DynamicType_var &  elem_type,
DCPS::Sample::Extent  ext 
) const

Definition at line 6959 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::serialized_size_delimiter().

6962 {
6964  for (CORBA::ULong i = 0; i < index_to_id.size(); ++i) {
6965  if (!serialized_size_complex_member(encoding, size, index_to_id[i], elem_type, ext)) {
6966  return false;
6967  }
6968  }
6969  return true;
6970 }
bool serialized_size_complex_member(const DCPS::Encoding &encoding, size_t &size, DDS::MemberId id, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULong ULong
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.

◆ serialized_size_complex_member()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_complex_member ( const DCPS::Encoding encoding,
size_t &  size,
DDS::MemberId  id,
const DDS::DynamicType_var &  elem_type,
DCPS::Sample::Extent  ext 
) const

Definition at line 6095 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::DynamicDataImpl(), and OpenDDS::XTypes::MEMBER_ID_INVALID.

6097 {
6098  if (id != MEMBER_ID_INVALID) {
6099  return serialized_size_complex_member_i(encoding, size, id, ext);
6100  } else {
6101  return DynamicDataImpl(elem_type).serialized_size_i(encoding, size, ext);
6102  }
6103 }
bool serialized_size_complex_member_i(const DCPS::Encoding &encoding, size_t &size, DDS::MemberId id, DCPS::Sample::Extent ext) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DynamicDataImpl(DDS::DynamicType_ptr type)

◆ serialized_size_complex_member_i()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_complex_member_i ( const DCPS::Encoding encoding,
size_t &  size,
DDS::MemberId  id,
DCPS::Sample::Extent  ext 
) const

Definition at line 5722 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::serialized_size_i().

5724 {
5725  const DDS::DynamicData_var& dd_var = complex_map_.at(id);
5726  const DynamicDataImpl* data_impl = dynamic_cast<const DynamicDataImpl*>(dd_var.in());
5727  if (!data_impl) {
5728  return false;
5729  }
5730  return data_impl->serialized_size_i(encoding, size, ext);
5731 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
DynamicDataImpl(DDS::DynamicType_ptr type)

◆ serialized_size_complex_sequence()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_complex_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const IndexToIdMap &  index_to_id,
const DDS::DynamicType_var &  elem_type,
DCPS::Sample::Extent  ext 
) const

Definition at line 6105 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

6107 {
6110  if (index_to_id.empty()) {
6111  return true;
6112  }
6113  for (CORBA::ULong i = 0; i < index_to_id.size(); ++i) {
6114  if (!serialized_size_complex_member(encoding, size, index_to_id[i], elem_type, ext)) {
6115  return false;
6116  }
6117  }
6118  return true;
6119 }
bool serialized_size_complex_member(const DCPS::Encoding &encoding, size_t &size, DDS::MemberId id, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
ACE_CDR::ULong ULong
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.

◆ serialized_size_discriminator_member_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_discriminator_member_xcdr2 ( const DCPS::Encoding encoding,
size_t &  size,
const DDS::DynamicType_var &  disc_type,
DDS::ExtensibilityKind  extensibility,
size_t &  mutable_running_total 
) const

Definition at line 8220 of file DynamicDataImpl.cpp.

References DDS::MUTABLE, and OpenDDS::DCPS::serialized_size_parameter_id().

8223 {
8224  if (extensibility == DDS::MUTABLE) {
8225  serialized_size_parameter_id(encoding, size, mutable_running_total);
8226  }
8227  const TypeKind disc_tk = disc_type->get_kind();
8228  if (data_->is_primitive(disc_tk)) {
8229  return serialized_size_primitive_member(encoding, size, disc_tk);
8230  }
8231  return serialized_size_enum(encoding, size, disc_type);
8232 }
bool serialized_size_enum(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &enum_type) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void serialized_size_parameter_id(const Encoding &encoding, size_t &size, size_t &running_size)
bool is_primitive(TypeKind tk) const
bool serialized_size_primitive_member(const DCPS::Encoding &encoding, size_t &size, TypeKind member_tk) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialized_size_enum()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_enum ( const DCPS::Encoding encoding,
size_t &  size,
const DDS::DynamicType_var &  enum_type 
) const

Definition at line 4179 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), and DDS::RETCODE_OK.

Referenced by OpenDDS::XTypes::DynamicDataImpl::serialized_size_i().

4181 {
4182  DDS::TypeDescriptor_var enum_td;
4183  if (enum_type->get_descriptor(enum_td) != DDS::RETCODE_OK) {
4184  return false;
4185  }
4186  const CORBA::ULong bit_bound = enum_td->bound()[0];
4187  if (bit_bound >= 1 && bit_bound <= 8) {
4188  primitive_serialized_size_int8(encoding, size);
4189  return true;
4190  } else if (bit_bound >= 9 && bit_bound <= 16) {
4192  } else if (bit_bound >= 17 && bit_bound <= 32) {
4194  }
4195  return false;
4196 }
ACE_CDR::Long Long
const ReturnCode_t RETCODE_OK
ACE_CDR::Short Short
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULong ULong
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_enum_array()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_enum_array ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length,
CORBA::ULong  bitbound 
) const

Definition at line 6616 of file DynamicDataImpl.cpp.

6618 {
6619  if (bitbound >= 1 && bitbound <= 8) {
6621  } else if (bitbound >= 9 && bitbound <= 16) {
6623  } else { // from 17 to 32
6625  }
6626 }
void serialized_size_enum_array_as_int32s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_enum_array_as_int16s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
void serialized_size_enum_array_as_int8s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialized_size_enum_array_as_int16s()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_enum_array_as_int16s ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length 
) const

Definition at line 6557 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), and OpenDDS::DCPS::serialized_size_delimiter().

6559 {
6562 }
ACE_CDR::Short Short
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_enum_array_as_int32s()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_enum_array_as_int32s ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length 
) const

Definition at line 6587 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), and OpenDDS::DCPS::serialized_size_delimiter().

6589 {
6592 }
ACE_CDR::Long Long
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_enum_array_as_int8s()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_enum_array_as_int8s ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length 
) const

Definition at line 6527 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::serialized_size_delimiter().

6529 {
6531  primitive_serialized_size_int8(encoding, size, length);
6532 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.

◆ serialized_size_enum_sequence() [1/5]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_enum_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const DDS::Int8Seq seq 
) const

Definition at line 5202 of file DynamicDataImpl.cpp.

5204 {
5205  serialized_size_enum_sequence_as_int8s(encoding, size, seq.length());
5206 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_enum_sequence_as_int8s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialized_size_enum_sequence() [2/5]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_enum_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const DDS::Int16Seq seq 
) const

Definition at line 5249 of file DynamicDataImpl.cpp.

5251 {
5253 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_enum_sequence_as_int16s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialized_size_enum_sequence() [3/5]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_enum_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const DDS::Int32Seq seq 
) const

Definition at line 5296 of file DynamicDataImpl.cpp.

5298 {
5300 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_enum_sequence_as_int32s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialized_size_enum_sequence() [4/5]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_enum_sequence ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length,
CORBA::ULong  bitbound 
) const

Definition at line 5331 of file DynamicDataImpl.cpp.

5333 {
5334  if (bitbound >= 1 && bitbound <= 8) {
5336  } else if (bitbound >= 9 && bitbound <= 16) {
5338  } else { // From 17 to 32
5340  }
5341 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void serialized_size_enum_sequence_as_int16s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
void serialized_size_enum_sequence_as_int8s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const
void serialized_size_enum_sequence_as_int32s(const DCPS::Encoding &encoding, size_t &size, CORBA::ULong length) const

◆ serialized_size_enum_sequence() [5/5]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_enum_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const_sequence_iterator  it 
) const

Definition at line 7708 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, and OpenDDS::XTypes::TK_INT8.

7710 {
7711  switch (it->second.elem_kind_) {
7712  case TK_INT8: {
7713  const DDS::Int8Seq& seq = it->second.get<DDS::Int8Seq>();
7715  return true;
7716  }
7717  case TK_INT16: {
7718  const DDS::Int16Seq& seq = it->second.get<DDS::Int16Seq>();
7720  return true;
7721  }
7722  case TK_INT32: {
7723  const DDS::Int32Seq& seq = it->second.get<DDS::Int32Seq>();
7725  return true;
7726  }
7727  }
7728  return false;
7729 }
const TypeKind TK_INT8
Definition: TypeObject.h:225
void serialized_size_enum_sequence(const DCPS::Encoding &encoding, size_t &size, const DDS::Int8Seq &seq) const
const TypeKind TK_INT32
Definition: TypeObject.h:217
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
sequence< short > Int16Seq
sequence< long > Int32Seq
sequence< int8 > Int8Seq
const TypeKind TK_INT16
Definition: TypeObject.h:216

◆ serialized_size_enum_sequence_as_int16s()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_enum_sequence_as_int16s ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length 
) const

Definition at line 5238 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

5240 {
5243  if (length == 0) {
5244  return;
5245  }
5247 }
ACE_CDR::Short Short
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_enum_sequence_as_int32s()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_enum_sequence_as_int32s ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length 
) const

Definition at line 5285 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

5287 {
5290  if (length == 0) {
5291  return;
5292  }
5294 }
ACE_CDR::Long Long
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_enum_sequence_as_int8s()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_enum_sequence_as_int8s ( const DCPS::Encoding encoding,
size_t &  size,
CORBA::ULong  length 
) const

Definition at line 5191 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

5193 {
5196  if (length == 0) {
5197  return;
5198  }
5199  primitive_serialized_size_int8(encoding, size, length);
5200 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.

◆ serialized_size_generic_string_array()

template<typename StringType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_generic_string_array ( const DCPS::Encoding encoding,
size_t &  size,
const IndexToIdMap &  index_to_id 
) const

Definition at line 6499 of file DynamicDataImpl.cpp.

References OpenDDS::STUN::encoding(), and OpenDDS::DCPS::serialized_size_delimiter().

6501 {
6503  return serialized_size_generic_string_collection<StringType>(encoding, size, index_to_id);
6504 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.

◆ serialized_size_generic_string_collection()

template<typename StringType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_generic_string_collection ( const DCPS::Encoding encoding,
size_t &  size,
const IndexToIdMap &  index_to_id 
) const

Definition at line 5078 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Sample::Full, and OpenDDS::XTypes::MEMBER_ID_INVALID.

5080 {
5081  for (CORBA::ULong i = 0; i < index_to_id.size(); ++i) {
5082  const DDS::MemberId id = index_to_id[i];
5083  if (id != MEMBER_ID_INVALID) {
5084  const_single_iterator single_it = single_map_.find(id);
5085  if (single_it != single_map_.end()) {
5086  serialized_size_string_common(encoding, size, single_it->second);
5088  return false;
5089  }
5090  } else {
5091  StringType default_value;
5092  set_default_basic_value(default_value);
5093  serialized_size_string_common(encoding, size, default_value);
5094  }
5095  }
5096  return true;
5097 }
ACE_CDR::ULong MemberId
Definition: TypeObject.h:910
bool serialized_size_complex_member_i(const DCPS::Encoding &encoding, size_t &size, DDS::MemberId id, DCPS::Sample::Extent ext) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
void set_default_basic_value(CORBA::Long &value) const
void serialized_size_string_common(const DCPS::Encoding &encoding, size_t &size, const char *str) const

◆ serialized_size_generic_string_sequence()

template<typename StringType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_generic_string_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const IndexToIdMap &  index_to_id 
) const

Definition at line 5100 of file DynamicDataImpl.cpp.

References OpenDDS::STUN::encoding(), OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

5102 {
5105  if (index_to_id.empty()) {
5106  return true;
5107  }
5108  return serialized_size_generic_string_collection<StringType>(encoding, size, index_to_id);
5109 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.

◆ serialized_size_nested_basic_sequences()

template<typename SequenceType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_nested_basic_sequences ( const DCPS::Encoding encoding,
size_t &  size,
const IndexToIdMap &  index_to_id,
SequenceType  protoseq 
) const

Definition at line 5734 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Sample::Full, OpenDDS::XTypes::MEMBER_ID_INVALID, and OpenDDS::DCPS::serialized_size().

5737 {
5738  for (CORBA::ULong i = 0; i < index_to_id.size(); ++i) {
5739  const CORBA::ULong id = index_to_id[i];
5740  if (id != MEMBER_ID_INVALID) {
5741  const_sequence_iterator it = sequence_map_.find(id);
5742  if (it != sequence_map_.end()) {
5743  serialized_size_sequence_value(encoding, size, it->second);
5745  return false;
5746  }
5747  } else { // Empty sequence
5748  protoseq.length(0);
5749  serialized_size(encoding, size, protoseq);
5750  }
5751  }
5752  return true;
5753 }
bool serialized_size_complex_member_i(const DCPS::Encoding &encoding, size_t &size, DDS::MemberId id, DCPS::Sample::Extent ext) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
bool serialized_size_sequence_value(const DCPS::Encoding &encoding, size_t &size, const SequenceValue &sv) const
bool serialized_size(const Encoding &encoding, size_t &size, const KeyOnly< const XTypes::DynamicDataImpl > &key)

◆ serialized_size_nested_bitmask_sequences()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_nested_bitmask_sequences ( const DCPS::Encoding encoding,
size_t &  size,
const IndexToIdMap &  index_to_id 
) const

Definition at line 6010 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Sample::Full, OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

6012 {
6013  for (CORBA::ULong i = 0; i < index_to_id.size(); ++i) {
6014  const CORBA::ULong id = index_to_id[i];
6015  if (id != MEMBER_ID_INVALID) {
6016  const_sequence_iterator it = sequence_map_.find(id);
6017  if (it != sequence_map_.end()) {
6020  return false;
6021  }
6022  } else {
6025  }
6026  }
6027  return true;
6028 }
bool serialized_size_complex_member_i(const DCPS::Encoding &encoding, size_t &size, DDS::MemberId id, DCPS::Sample::Extent ext) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
void serialized_size_bitmask_sequence(const DCPS::Encoding &encoding, size_t &size, const DDS::UInt8Seq &seq) const

◆ serialized_size_nested_enum_sequences()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_nested_enum_sequences ( const DCPS::Encoding encoding,
size_t &  size,
const IndexToIdMap &  index_to_id 
) const

Definition at line 5925 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Sample::Full, OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

5927 {
5928  for (CORBA::ULong i = 0; i < index_to_id.size(); ++i) {
5929  const CORBA::ULong id = index_to_id[i];
5930  if (id != MEMBER_ID_INVALID) {
5931  const_sequence_iterator it = sequence_map_.find(id);
5932  if (it != sequence_map_.end()) {
5935  return false;
5936  }
5937  } else {
5940  }
5941  }
5942  return true;
5943 }
void serialized_size_enum_sequence(const DCPS::Encoding &encoding, size_t &size, const DDS::Int8Seq &seq) const
bool serialized_size_complex_member_i(const DCPS::Encoding &encoding, size_t &size, DDS::MemberId id, DCPS::Sample::Extent ext) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.

◆ serialized_size_nesting_basic_array() [1/2]

template<typename SequenceType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_nesting_basic_array ( const DCPS::Encoding encoding,
size_t &  size,
const IndexToIdMap &  index_to_id,
SequenceType  protoseq 
) const

Definition at line 6791 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::serialized_size_delimiter().

6793 {
6795  return serialized_size_nested_basic_sequences(encoding, size, index_to_id, protoseq);
6796 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
bool serialized_size_nested_basic_sequences(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, SequenceType protoseq) const

◆ serialized_size_nesting_basic_array() [2/2]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_nesting_basic_array ( const DCPS::Encoding encoding,
size_t &  size,
TypeKind  nested_elem_tk,
const IndexToIdMap &  index_to_id 
) const

Definition at line 6818 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

6821 {
6822  switch (nested_elem_tk) {
6823  case TK_INT32:
6824  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::Int32Seq());
6825  case TK_UINT32:
6826  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::UInt32Seq());
6827  case TK_INT8:
6828  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::Int8Seq());
6829  case TK_UINT8:
6830  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::UInt8Seq());
6831  case TK_INT16:
6832  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::Int16Seq());
6833  case TK_UINT16:
6834  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::UInt16Seq());
6835  case TK_INT64:
6836  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::Int64Seq());
6837  case TK_UINT64:
6838  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::UInt64Seq());
6839  case TK_FLOAT32:
6840  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::Float32Seq());
6841  case TK_FLOAT64:
6842  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::Float64Seq());
6843  case TK_FLOAT128:
6844  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::Float128Seq());
6845  case TK_CHAR8:
6846  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::CharSeq());
6847  case TK_STRING8:
6848  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::StringSeq());
6849 #ifdef DDS_HAS_WCHAR
6850  case TK_CHAR16:
6851  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::WcharSeq());
6852  case TK_STRING16:
6853  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::WstringSeq());
6854 #endif
6855  case TK_BYTE:
6856  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::ByteSeq());
6857  case TK_BOOLEAN:
6858  return serialized_size_nesting_basic_array(encoding, size, index_to_id, DDS::BooleanSeq());
6859  }
6860  return false;
6861 }
sequence< char > CharSeq
const TypeKind TK_INT8
Definition: TypeObject.h:225
sequence< unsigned long > UInt32Seq
sequence< unsigned long long > UInt64Seq
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
bool serialized_size_nesting_basic_array(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, SequenceType protoseq) const
sequence< float > Float32Seq
sequence< boolean > BooleanSeq
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
sequence< wchar > WcharSeq
sequence< long long > Int64Seq
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const TypeKind TK_STRING16
Definition: TypeObject.h:232
sequence< string > StringSeq
Definition: DdsDcpsCore.idl:50
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
sequence< uint8 > UInt8Seq
const TypeKind TK_UINT16
Definition: TypeObject.h:219
sequence< double > Float64Seq
sequence< short > Int16Seq
sequence< long double > Float128Seq
const TypeKind TK_INT64
Definition: TypeObject.h:218
sequence< long > Int32Seq
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
sequence< wstring > WstringSeq
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
sequence< int8 > Int8Seq
const TypeKind TK_INT16
Definition: TypeObject.h:216
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_STRING8
Definition: TypeObject.h:231
sequence< unsigned short > UInt16Seq
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
sequence< octet > ByteSeq

◆ serialized_size_nesting_basic_sequence() [1/2]

template<typename SequenceType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_nesting_basic_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const IndexToIdMap &  index_to_id,
SequenceType  protoseq 
) const

Definition at line 5756 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

5759 {
5762  if (index_to_id.empty()) {
5763  return true;
5764  }
5765  return serialized_size_nested_basic_sequences(encoding, size, index_to_id, protoseq);
5766 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
bool serialized_size_nested_basic_sequences(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, SequenceType protoseq) const

◆ serialized_size_nesting_basic_sequence() [2/2]

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_nesting_basic_sequence ( const DCPS::Encoding encoding,
size_t &  size,
TypeKind  nested_elem_tk,
const IndexToIdMap &  index_to_id 
) const

Definition at line 5836 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

5839 {
5840  switch (nested_elem_tk) {
5841  case TK_INT32:
5842  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::Int32Seq());
5843  case TK_UINT32:
5844  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::UInt32Seq());
5845  case TK_INT8:
5846  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::Int8Seq());
5847  case TK_UINT8:
5848  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::UInt8Seq());
5849  case TK_INT16:
5850  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::Int16Seq());
5851  case TK_UINT16:
5852  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::UInt16Seq());
5853  case TK_INT64:
5854  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::Int64Seq());
5855  case TK_UINT64:
5856  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::UInt64Seq());
5857  case TK_FLOAT32:
5858  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::Float32Seq());
5859  case TK_FLOAT64:
5860  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::Float64Seq());
5861  case TK_FLOAT128:
5863  case TK_CHAR8:
5864  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::CharSeq());
5865  case TK_STRING8:
5866  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::StringSeq());
5867 #ifdef DDS_HAS_WCHAR
5868  case TK_CHAR16:
5869  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::WcharSeq());
5870  case TK_STRING16:
5871  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::WstringSeq());
5872 #endif
5873  case TK_BYTE:
5874  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::ByteSeq());
5875  case TK_BOOLEAN:
5876  return serialized_size_nesting_basic_sequence(encoding, size, index_to_id, DDS::BooleanSeq());
5877  }
5878  return false;
5879 }
sequence< char > CharSeq
const TypeKind TK_INT8
Definition: TypeObject.h:225
sequence< unsigned long > UInt32Seq
sequence< unsigned long long > UInt64Seq
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
sequence< float > Float32Seq
sequence< boolean > BooleanSeq
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
sequence< wchar > WcharSeq
sequence< long long > Int64Seq
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const TypeKind TK_STRING16
Definition: TypeObject.h:232
sequence< string > StringSeq
Definition: DdsDcpsCore.idl:50
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
sequence< uint8 > UInt8Seq
const TypeKind TK_UINT16
Definition: TypeObject.h:219
sequence< double > Float64Seq
sequence< short > Int16Seq
sequence< long double > Float128Seq
const TypeKind TK_INT64
Definition: TypeObject.h:218
sequence< long > Int32Seq
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
sequence< wstring > WstringSeq
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
sequence< int8 > Int8Seq
const TypeKind TK_INT16
Definition: TypeObject.h:216
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_STRING8
Definition: TypeObject.h:231
sequence< unsigned short > UInt16Seq
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
bool serialized_size_nesting_basic_sequence(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, SequenceType protoseq) const
sequence< octet > ByteSeq

◆ serialized_size_nesting_bitmask_array()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_nesting_bitmask_array ( const DCPS::Encoding encoding,
size_t &  size,
const IndexToIdMap &  index_to_id 
) const

Definition at line 6933 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::serialized_size_delimiter().

6935 {
6937  return serialized_size_nested_bitmask_sequences(encoding, size, index_to_id);
6938 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
bool serialized_size_nested_bitmask_sequences(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.

◆ serialized_size_nesting_bitmask_sequence()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_nesting_bitmask_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const IndexToIdMap &  index_to_id 
) const

Definition at line 6030 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

6032 {
6035  if (index_to_id.empty()) {
6036  return true;
6037  }
6038  return serialized_size_nested_bitmask_sequences(encoding, size, index_to_id);
6039 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
bool serialized_size_nested_bitmask_sequences(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.

◆ serialized_size_nesting_enum_array()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_nesting_enum_array ( const DCPS::Encoding encoding,
size_t &  size,
const IndexToIdMap &  index_to_id 
) const

Definition at line 6907 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::serialized_size_delimiter().

6909 {
6911  return serialized_size_nested_enum_sequences(encoding, size, index_to_id);
6912 }
bool serialized_size_nested_enum_sequences(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.

◆ serialized_size_nesting_enum_sequence()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_nesting_enum_sequence ( const DCPS::Encoding encoding,
size_t &  size,
const IndexToIdMap &  index_to_id 
) const

Definition at line 5945 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

5947 {
5950  if (index_to_id.empty()) {
5951  return true;
5952  }
5953  return serialized_size_nested_enum_sequences(encoding, size, index_to_id);
5954 }
bool serialized_size_nested_enum_sequences(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.

◆ serialized_size_primitive_array()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_primitive_array ( const DCPS::Encoding encoding,
size_t &  size,
TypeKind  elem_tk,
CORBA::ULong  length 
) const

Definition at line 6359 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), OpenDDS::DCPS::primitive_serialized_size_boolean(), OpenDDS::DCPS::primitive_serialized_size_char(), OpenDDS::DCPS::primitive_serialized_size_octet(), OpenDDS::DCPS::primitive_serialized_size_wchar(), OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

6361 {
6362  switch (elem_tk) {
6363  case TK_INT32:
6365  return;
6366  case TK_UINT32:
6368  return;
6369  case TK_INT8:
6370  primitive_serialized_size_int8(encoding, size, length);
6371  return;
6372  case TK_UINT8:
6373  primitive_serialized_size_uint8(encoding, size, length);
6374  return;
6375  case TK_INT16:
6377  return;
6378  case TK_UINT16:
6380  return;
6381  case TK_INT64:
6383  return;
6384  case TK_UINT64:
6386  return;
6387  case TK_FLOAT32:
6389  return;
6390  case TK_FLOAT64:
6392  return;
6393  case TK_FLOAT128:
6395  return;
6396  case TK_CHAR8:
6398  return;
6399 #ifdef DDS_HAS_WCHAR
6400  case TK_CHAR16:
6402  return;
6403 #endif
6404  case TK_BYTE:
6406  return;
6407  case TK_BOOLEAN:
6409  return;
6410  }
6411 }
ACE_CDR::Long Long
const TypeKind TK_INT8
Definition: TypeObject.h:225
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
OpenDDS_Dcps_Export void primitive_serialized_size_octet(const Encoding &encoding, size_t &size, size_t count=1)
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
ACE_CDR::LongLong LongLong
ACE_CDR::Short Short
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULongLong ULongLong
const TypeKind TK_UINT16
Definition: TypeObject.h:219
ACE_CDR::ULong ULong
const TypeKind TK_INT64
Definition: TypeObject.h:218
OpenDDS_Dcps_Export void primitive_serialized_size_char(const Encoding &encoding, size_t &size, size_t count=1)
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const TypeKind TK_INT16
Definition: TypeObject.h:216
OpenDDS_Dcps_Export void primitive_serialized_size_wchar(const Encoding &encoding, size_t &size, size_t count=1)
ACE_CDR::UShort UShort
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
OpenDDS_Dcps_Export void primitive_serialized_size_boolean(const Encoding &encoding, size_t &size, size_t count=1)
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_primitive_member()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_primitive_member ( const DCPS::Encoding encoding,
size_t &  size,
TypeKind  member_tk 
) const

Definition at line 7108 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), OpenDDS::DCPS::primitive_serialized_size_boolean(), OpenDDS::DCPS::primitive_serialized_size_char(), OpenDDS::DCPS::primitive_serialized_size_octet(), OpenDDS::DCPS::primitive_serialized_size_wchar(), OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

7110 {
7111  using namespace OpenDDS::DCPS;
7112 
7113  switch (member_tk) {
7114  case TK_INT32:
7116  case TK_UINT32:
7118  case TK_INT8:
7119  primitive_serialized_size_int8(encoding, size);
7120  return true;
7121  case TK_UINT8:
7122  primitive_serialized_size_uint8(encoding, size);
7123  return true;
7124  case TK_INT16:
7126  case TK_UINT16:
7128  case TK_INT64:
7130  case TK_UINT64:
7132  case TK_FLOAT32:
7134  case TK_FLOAT64:
7136  case TK_FLOAT128:
7138  case TK_CHAR8:
7140  return true;
7141 #ifdef DDS_HAS_WCHAR
7142  case TK_CHAR16:
7144  return true;
7145 #endif
7146  case TK_BYTE:
7148  return true;
7149  case TK_BOOLEAN:
7151  return true;
7152  }
7153  return false;
7154 }
ACE_CDR::Long Long
const TypeKind TK_INT8
Definition: TypeObject.h:225
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
OpenDDS_Dcps_Export void primitive_serialized_size_octet(const Encoding &encoding, size_t &size, size_t count=1)
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
ACE_CDR::LongLong LongLong
ACE_CDR::Short Short
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULongLong ULongLong
const TypeKind TK_UINT16
Definition: TypeObject.h:219
ACE_CDR::ULong ULong
const TypeKind TK_INT64
Definition: TypeObject.h:218
OpenDDS_Dcps_Export void primitive_serialized_size_char(const Encoding &encoding, size_t &size, size_t count=1)
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const TypeKind TK_INT16
Definition: TypeObject.h:216
OpenDDS_Dcps_Export void primitive_serialized_size_wchar(const Encoding &encoding, size_t &size, size_t count=1)
ACE_CDR::UShort UShort
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
OpenDDS_Dcps_Export void primitive_serialized_size_boolean(const Encoding &encoding, size_t &size, size_t count=1)
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_primitive_sequence()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_primitive_sequence ( const DCPS::Encoding encoding,
size_t &  size,
TypeKind  elem_tk,
CORBA::ULong  length 
) const

Definition at line 4410 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size(), OpenDDS::DCPS::primitive_serialized_size_boolean(), OpenDDS::DCPS::primitive_serialized_size_char(), OpenDDS::DCPS::primitive_serialized_size_octet(), OpenDDS::DCPS::primitive_serialized_size_ulong(), OpenDDS::DCPS::primitive_serialized_size_wchar(), OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

4412 {
4413  switch (elem_tk) {
4414  case TK_INT32:
4416  if (length == 0) {
4417  return;
4418  }
4420  return;
4421  case TK_UINT32:
4423  if (length == 0) {
4424  return;
4425  }
4427  return;
4428  case TK_INT8:
4430  if (length == 0) {
4431  return;
4432  }
4433  primitive_serialized_size_int8(encoding, size, length);
4434  return;
4435  case TK_UINT8:
4437  if (length == 0) {
4438  return;
4439  }
4440  primitive_serialized_size_uint8(encoding, size, length);
4441  return;
4442  case TK_INT16:
4444  if (length == 0) {
4445  return;
4446  }
4448  return;
4449  case TK_UINT16:
4451  if (length == 0) {
4452  return;
4453  }
4455  return;
4456  case TK_INT64:
4458  if (length == 0) {
4459  return;
4460  }
4462  return;
4463  case TK_UINT64:
4465  if (length == 0) {
4466  return;
4467  }
4469  return;
4470  case TK_FLOAT32:
4472  if (length == 0) {
4473  return;
4474  }
4476  return;
4477  case TK_FLOAT64:
4479  if (length == 0) {
4480  return;
4481  }
4483  return;
4484  case TK_FLOAT128:
4486  if (length == 0) {
4487  return;
4488  }
4490  return;
4491  case TK_CHAR8:
4493  if (length == 0) {
4494  return;
4495  }
4497  return;
4498 #ifdef DDS_HAS_WCHAR
4499  case TK_CHAR16:
4501  if (length == 0) {
4502  return;
4503  }
4505  return;
4506 #endif
4507  case TK_BYTE:
4509  if (length == 0) {
4510  return;
4511  }
4513  return;
4514  case TK_BOOLEAN:
4516  if (length == 0) {
4517  return;
4518  }
4520  return;
4521  }
4522 }
ACE_CDR::Long Long
const TypeKind TK_INT8
Definition: TypeObject.h:225
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
OpenDDS_Dcps_Export void primitive_serialized_size_octet(const Encoding &encoding, size_t &size, size_t count=1)
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
ACE_CDR::LongLong LongLong
ACE_CDR::Short Short
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULongLong ULongLong
const TypeKind TK_UINT16
Definition: TypeObject.h:219
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
ACE_CDR::ULong ULong
const TypeKind TK_INT64
Definition: TypeObject.h:218
OpenDDS_Dcps_Export void primitive_serialized_size_char(const Encoding &encoding, size_t &size, size_t count=1)
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const TypeKind TK_INT16
Definition: TypeObject.h:216
OpenDDS_Dcps_Export void primitive_serialized_size_wchar(const Encoding &encoding, size_t &size, size_t count=1)
ACE_CDR::UShort UShort
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
OpenDDS_Dcps_Export void primitive_serialized_size_boolean(const Encoding &encoding, size_t &size, size_t count=1)
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ serialized_size_selected_member_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_selected_member_xcdr2 ( const DCPS::Encoding encoding,
size_t &  size,
DDS::MemberId  selected_id,
DDS::ExtensibilityKind  extensibility,
size_t &  mutable_running_total 
) const

Definition at line 8298 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Sample::Full, OpenDDS::XTypes::get_base_type(), DDS::RETCODE_OK, and OpenDDS::XTypes::DynamicDataBase::type_.

8301 {
8302  DDS::DynamicTypeMember_var selected_dtm;
8303  if (type_->get_member(selected_dtm, selected_id) != DDS::RETCODE_OK) {
8304  return false;
8305  }
8306  DDS::MemberDescriptor_var selected_md;
8307  if (selected_dtm->get_descriptor(selected_md) != DDS::RETCODE_OK) {
8308  return false;
8309  }
8310  DDS::DynamicType_var selected_type = get_base_type(selected_md->type());
8311  const bool optional = selected_md->is_optional();
8312 
8313  const_single_iterator single_it = single_map_.find(selected_id);
8314  if (single_it != single_map_.end()) {
8315  return serialized_size_single_aggregated_member_xcdr2(encoding, size, single_it, selected_type, optional,
8316  extensibility, mutable_running_total);
8317  }
8318 
8319  const_sequence_iterator seq_it = sequence_map_.find(selected_id);
8320  if (seq_it != sequence_map_.end()) {
8321  DDS::TypeDescriptor_var selected_td;
8322  if (selected_type->get_descriptor(selected_td) != DDS::RETCODE_OK) {
8323  return false;
8324  }
8325  const TypeKind elem_tk = get_base_type(selected_td->element_type())->get_kind();
8326  serialized_size_sequence_aggregated_member_xcdr2(encoding, size, seq_it, elem_tk, optional,
8327  extensibility, mutable_running_total);
8328  return true;
8329  }
8330 
8331  const_complex_iterator complex_it = complex_map_.find(selected_id);
8332  if (complex_it != complex_map_.end()) {
8333  return serialized_size_complex_aggregated_member_xcdr2(encoding, size, complex_it, optional,
8334  extensibility, mutable_running_total,
8336  }
8337  return false;
8338 }
const ReturnCode_t RETCODE_OK
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
bool serialized_size_single_aggregated_member_xcdr2(const DCPS::Encoding &encoding, size_t &size, const_single_iterator it, const DDS::DynamicType_var &member_type, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
bool serialized_size_complex_aggregated_member_xcdr2(const DCPS::Encoding &encoding, size_t &size, const_complex_iterator it, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total, DCPS::Sample::Extent ext) const
void serialized_size_sequence_aggregated_member_xcdr2(const DCPS::Encoding &encoding, size_t &size, const_sequence_iterator it, TypeKind elem_tk, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialized_size_sequence()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_sequence ( const DCPS::Encoding encoding,
size_t &  size,
DCPS::Sample::Extent  ext 
) const

Definition at line 6191 of file DynamicDataImpl.cpp.

References OpenDDS::STUN::encoding(), OpenDDS::XTypes::get_base_type(), OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::RETCODE_OK, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by OpenDDS::XTypes::DynamicDataImpl::serialized_size_i().

6194 {
6195  DDS::TypeDescriptor_var descriptor;
6196  if (type_->get_descriptor(descriptor) != DDS::RETCODE_OK) {
6197  return false;
6198  }
6199  const CORBA::ULong bound = descriptor->bound()[0];
6200 
6201  const DDS::DynamicType_var elem_type = get_base_type(descriptor->element_type());
6202  const TypeKind elem_tk = elem_type->get_kind();
6203  DDS::TypeDescriptor_var elem_td;
6204  if (elem_type->get_descriptor(elem_td) != DDS::RETCODE_OK) {
6205  return false;
6206  }
6207 
6208  if (data_->is_basic(elem_tk) || elem_tk == TK_ENUM || elem_tk == TK_BITMASK) {
6209  const bool is_empty = single_map_.empty() && complex_map_.empty();
6210  CORBA::ULong length = 0;
6211  if (!is_empty) {
6212  CORBA::ULong largest_index;
6213  if (!get_largest_index_basic(largest_index)) {
6214  return false;
6215  }
6216  length = largest_index + 1;
6217  }
6218  if (data_->is_primitive(elem_tk)) {
6219  serialized_size_primitive_sequence(encoding, size, elem_tk, length);
6220  return true;
6221  } else if (elem_tk == TK_STRING8) {
6222  IndexToIdMap index_to_id(length, MEMBER_ID_INVALID);
6223  if (!get_index_to_id_map(index_to_id, bound)) {
6224  return false;
6225  }
6226  return serialized_size_generic_string_sequence<const char*>(encoding, size, index_to_id);
6227  } else if (elem_tk == TK_STRING16) {
6228 #ifdef DDS_HAS_WCHAR
6229  IndexToIdMap index_to_id(length, MEMBER_ID_INVALID);
6230  if (!get_index_to_id_map(index_to_id, bound)) {
6231  return false;
6232  }
6233  return serialized_size_generic_string_sequence<const CORBA::WChar*>(encoding, size, index_to_id);
6234 #else
6235  return false;
6236 #endif
6237  } else if (elem_tk == TK_ENUM) {
6238  const CORBA::ULong bit_bound = elem_td->bound()[0];
6239  serialized_size_enum_sequence(encoding, size, length, bit_bound);
6240  return true;
6241  } else if (elem_tk == TK_BITMASK) {
6242  const CORBA::ULong bit_bound = elem_td->bound()[0];
6243  serialized_size_bitmask_sequence(encoding, size, length, bit_bound);
6244  }
6245  } else if (elem_tk == TK_SEQUENCE) {
6246  const DDS::DynamicType_var nested_elem_type = get_base_type(elem_td->element_type());
6247  const TypeKind nested_elem_tk = nested_elem_type->get_kind();
6248  if (data_->is_basic(nested_elem_tk) || nested_elem_tk == TK_ENUM ||
6249  nested_elem_tk == TK_BITMASK) {
6250  const bool is_empty = sequence_map_.empty() && complex_map_.empty();
6251  CORBA::ULong length = 0;
6252  if (!is_empty) {
6253  CORBA::ULong largest_index;
6254  if (!get_largest_index_basic_sequence(largest_index)) {
6255  return false;
6256  }
6257  length = largest_index + 1;
6258  }
6259  IndexToIdMap index_to_id(length, MEMBER_ID_INVALID);
6260  if (!get_index_to_id_map(index_to_id, bound)) {
6261  return false;
6262  }
6263  if (data_->is_basic(nested_elem_tk)) {
6264  return serialized_size_nesting_basic_sequence(encoding, size, nested_elem_tk, index_to_id);
6265  } else if (nested_elem_tk == TK_ENUM) {
6266  return serialized_size_nesting_enum_sequence(encoding, size, index_to_id);
6267  } else {
6268  return serialized_size_nesting_bitmask_sequence(encoding, size, index_to_id);
6269  }
6270  }
6271  }
6272 
6273  // Elements stored in complex map
6274  IndexToIdMap index_to_id;
6275  if (!get_index_to_id_from_complex(index_to_id, bound)) {
6276  return false;
6277  }
6278  return serialized_size_complex_sequence(encoding, size, index_to_id, elem_type, ext);
6279 }
bool get_index_to_id_from_complex(IndexToIdMap &index_to_id, CORBA::ULong bound) const
void serialized_size_enum_sequence(const DCPS::Encoding &encoding, size_t &size, const DDS::Int8Seq &seq) const
const ReturnCode_t RETCODE_OK
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
bool get_largest_index_basic(CORBA::ULong &index) const
bool serialized_size_nesting_bitmask_sequence(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
const TypeKind TK_STRING16
Definition: TypeObject.h:232
void serialized_size_primitive_sequence(const DCPS::Encoding &encoding, size_t &size, TypeKind elem_tk, CORBA::ULong length) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
const TypeKind TK_STRING8
Definition: TypeObject.h:231
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
const TypeKind TK_ENUM
Definition: TypeObject.h:238
bool get_largest_index_basic_sequence(CORBA::ULong &index) const
bool is_primitive(TypeKind tk) const
bool serialized_size_nesting_enum_sequence(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id) const
bool get_index_to_id_map(IndexToIdMap &index_to_id, CORBA::ULong bound) const
void serialized_size_bitmask_sequence(const DCPS::Encoding &encoding, size_t &size, const DDS::UInt8Seq &seq) const
bool serialized_size_nesting_basic_sequence(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, SequenceType protoseq) const
bool is_basic(TypeKind tk) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
bool serialized_size_complex_sequence(const DCPS::Encoding &encoding, size_t &size, const IndexToIdMap &index_to_id, const DDS::DynamicType_var &elem_type, DCPS::Sample::Extent ext) const

◆ serialized_size_sequence_aggregated_member_xcdr2()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_sequence_aggregated_member_xcdr2 ( const DCPS::Encoding encoding,
size_t &  size,
const_sequence_iterator  it,
TypeKind  elem_tk,
bool  optional,
DDS::ExtensibilityKind  extensibility,
size_t &  mutable_running_total 
) const

Definition at line 7805 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, DDS::FINAL, DDS::MUTABLE, OpenDDS::DCPS::primitive_serialized_size_boolean(), OpenDDS::DCPS::serialized_size_parameter_id(), and OpenDDS::XTypes::TK_ENUM.

7808 {
7809  if (optional && (extensibility == DDS::FINAL || extensibility == DDS::APPENDABLE)) {
7811  } else if (extensibility == DDS::MUTABLE) {
7812  serialized_size_parameter_id(encoding, size, mutable_running_total);
7813  }
7814  if (data_->is_basic(elem_tk)) {
7816  } else if (elem_tk == TK_ENUM) {
7818  } else { // Bitmask
7820  }
7821 }
void serialized_size_enum_sequence(const DCPS::Encoding &encoding, size_t &size, const DDS::Int8Seq &seq) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void serialized_size_parameter_id(const Encoding &encoding, size_t &size, size_t &running_size)
const TypeKind TK_ENUM
Definition: TypeObject.h:238
bool serialized_size_basic_sequence(const DCPS::Encoding &encoding, size_t &size, const_sequence_iterator it) const
OpenDDS_Dcps_Export void primitive_serialized_size_boolean(const Encoding &encoding, size_t &size, size_t count=1)
void serialized_size_bitmask_sequence(const DCPS::Encoding &encoding, size_t &size, const DDS::UInt8Seq &seq) const
bool is_basic(TypeKind tk) const
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialized_size_sequence_member_default_value()

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_sequence_member_default_value ( const DCPS::Encoding encoding,
size_t &  size,
TypeKind  elem_tk 
) const

Definition at line 7512 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size_ulong(), and OpenDDS::DCPS::serialized_size_delimiter().

7514 {
7515  // Zero-length sequence
7516  if (!data_->is_primitive(elem_tk)) {
7518  }
7520 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
bool is_primitive(TypeKind tk) const

◆ serialized_size_sequence_struct_member_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_sequence_struct_member_xcdr2 ( const DCPS::Encoding encoding,
size_t &  size,
DDS::MemberId  id,
TypeKind  elem_tk,
bool  optional,
DDS::ExtensibilityKind  extensibility,
size_t &  mutable_running_total,
DCPS::Sample::Extent  ext 
) const

Definition at line 7858 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, DDS::FINAL, OpenDDS::DCPS::Sample::Full, DDS::MUTABLE, OpenDDS::DCPS::primitive_serialized_size_boolean(), and OpenDDS::DCPS::serialized_size_parameter_id().

7862 {
7863  const_sequence_iterator seq_it = sequence_map_.find(id);
7864  const_complex_iterator complex_it = complex_map_.find(id);
7865  if (seq_it == sequence_map_.end() && complex_it == complex_map_.end()) {
7866  if (optional) {
7869  }
7870  return true;
7871  }
7872  if (extensibility == DDS::MUTABLE) {
7873  serialized_size_parameter_id(encoding, size, mutable_running_total);
7874  }
7876  return true;
7877  }
7878  if (seq_it != sequence_map_.end()) {
7879  serialized_size_sequence_aggregated_member_xcdr2(encoding, size, seq_it, elem_tk, optional,
7880  extensibility, mutable_running_total);
7881  return true;
7882  }
7883  return serialized_size_complex_aggregated_member_xcdr2(encoding, size, complex_it, optional,
7884  extensibility, mutable_running_total,
7886 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
bool serialized_size_complex_aggregated_member_xcdr2(const DCPS::Encoding &encoding, size_t &size, const_complex_iterator it, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total, DCPS::Sample::Extent ext) const
void serialized_size_sequence_member_default_value(const DCPS::Encoding &encoding, size_t &size, TypeKind elem_tk) const
OpenDDS_Dcps_Export void serialized_size_parameter_id(const Encoding &encoding, size_t &size, size_t &running_size)
void serialized_size_sequence_aggregated_member_xcdr2(const DCPS::Encoding &encoding, size_t &size, const_sequence_iterator it, TypeKind elem_tk, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total) const
OpenDDS_Dcps_Export void primitive_serialized_size_boolean(const Encoding &encoding, size_t &size, size_t count=1)
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialized_size_sequence_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_sequence_value ( const DCPS::Encoding encoding,
size_t &  size,
const SequenceValue sv 
) const

Definition at line 5593 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::SequenceValue::elem_kind_, OpenDDS::XTypes::DynamicDataImpl::SequenceValue::get(), OpenDDS::DCPS::serialized_size(), OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

5595 {
5596  switch (sv.elem_kind_) {
5597  case TK_INT32:
5598  serialized_size(encoding, size, sv.get<DDS::Int32Seq>());
5599  return true;
5600  case TK_UINT32:
5601  serialized_size(encoding, size, sv.get<DDS::UInt32Seq>());
5602  return true;
5603  case TK_INT8:
5604  serialized_size(encoding, size, sv.get<DDS::Int8Seq>());
5605  return true;
5606  case TK_UINT8:
5607  serialized_size(encoding, size, sv.get<DDS::UInt8Seq>());
5608  return true;
5609  case TK_INT16:
5610  serialized_size(encoding, size, sv.get<DDS::Int16Seq>());
5611  return true;
5612  case TK_UINT16:
5613  serialized_size(encoding, size, sv.get<DDS::UInt16Seq>());
5614  return true;
5615  case TK_INT64:
5616  serialized_size(encoding, size, sv.get<DDS::Int64Seq>());
5617  return true;
5618  case TK_UINT64:
5619  serialized_size(encoding, size, sv.get<DDS::UInt64Seq>());
5620  return true;
5621  case TK_FLOAT32:
5622  serialized_size(encoding, size, sv.get<DDS::Float32Seq>());
5623  return true;
5624  case TK_FLOAT64:
5625  serialized_size(encoding, size, sv.get<DDS::Float64Seq>());
5626  return true;
5627  case TK_FLOAT128:
5628  serialized_size(encoding, size, sv.get<DDS::Float128Seq>());
5629  return true;
5630  case TK_CHAR8:
5631  serialized_size(encoding, size, sv.get<DDS::CharSeq>());
5632  return true;
5633  case TK_BYTE:
5634  serialized_size(encoding, size, sv.get<DDS::ByteSeq>());
5635  return true;
5636  case TK_BOOLEAN:
5637  serialized_size(encoding, size, sv.get<DDS::BooleanSeq>());
5638  return true;
5639  case TK_STRING8:
5640  serialized_size(encoding, size, sv.get<DDS::StringSeq>());
5641  return true;
5642 #ifdef DDS_HAS_WCHAR
5643  case TK_CHAR16:
5644  serialized_size(encoding, size, sv.get<DDS::WcharSeq>());
5645  return true;
5646  case TK_STRING16:
5647  serialized_size(encoding, size, sv.get<DDS::WstringSeq>());
5648  return true;
5649 #endif
5650  default:
5651  return false;
5652  }
5653 }
sequence< char > CharSeq
const TypeKind TK_INT8
Definition: TypeObject.h:225
sequence< unsigned long > UInt32Seq
sequence< unsigned long long > UInt64Seq
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
sequence< float > Float32Seq
sequence< boolean > BooleanSeq
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
sequence< wchar > WcharSeq
sequence< long long > Int64Seq
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const TypeKind TK_STRING16
Definition: TypeObject.h:232
sequence< string > StringSeq
Definition: DdsDcpsCore.idl:50
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
sequence< uint8 > UInt8Seq
const TypeKind TK_UINT16
Definition: TypeObject.h:219
sequence< double > Float64Seq
sequence< short > Int16Seq
sequence< long double > Float128Seq
const TypeKind TK_INT64
Definition: TypeObject.h:218
sequence< long > Int32Seq
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
sequence< wstring > WstringSeq
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
sequence< int8 > Int8Seq
const TypeKind TK_INT16
Definition: TypeObject.h:216
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_STRING8
Definition: TypeObject.h:231
sequence< unsigned short > UInt16Seq
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
bool serialized_size(const Encoding &encoding, size_t &size, const KeyOnly< const XTypes::DynamicDataImpl > &key)
sequence< octet > ByteSeq

◆ serialized_size_single_aggregated_member_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_single_aggregated_member_xcdr2 ( const DCPS::Encoding encoding,
size_t &  size,
const_single_iterator  it,
const DDS::DynamicType_var &  member_type,
bool  optional,
DDS::ExtensibilityKind  extensibility,
size_t &  mutable_running_total 
) const

Definition at line 7288 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, DDS::FINAL, DDS::MUTABLE, OpenDDS::DCPS::primitive_serialized_size_boolean(), OpenDDS::DCPS::serialized_size_parameter_id(), and OpenDDS::XTypes::TK_ENUM.

7292 {
7293  if (optional && (extensibility == DDS::FINAL || extensibility == DDS::APPENDABLE)) {
7295  } else if (extensibility == DDS::MUTABLE) {
7296  serialized_size_parameter_id(encoding, size, mutable_running_total);
7297  }
7298  const TypeKind member_tk = member_type->get_kind();
7299  if (data_->is_basic(member_tk)) {
7300  return serialized_size_basic_member(encoding, size, member_tk, it);
7301  } else if (member_tk == TK_ENUM) {
7302  return serialized_size_enum(encoding, size, member_type);
7303  } else { // Bitmask
7304  return serialized_size_bitmask(encoding, size, member_type);
7305  }
7306 }
bool serialized_size_enum(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &enum_type) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
bool serialized_size_basic_member(const DCPS::Encoding &encoding, size_t &size, TypeKind member_tk, const_single_iterator it) const
bool serialized_size_bitmask(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &bitmask_type) const
OpenDDS_Dcps_Export void serialized_size_parameter_id(const Encoding &encoding, size_t &size, size_t &running_size)
const TypeKind TK_ENUM
Definition: TypeObject.h:238
OpenDDS_Dcps_Export void primitive_serialized_size_boolean(const Encoding &encoding, size_t &size, size_t count=1)
bool is_basic(TypeKind tk) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29

◆ serialized_size_string()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_string ( const DCPS::Encoding encoding,
size_t &  size 
) const

Definition at line 4324 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::primitive_serialized_size_ulong().

Referenced by OpenDDS::XTypes::DynamicDataImpl::serialized_size_i().

4326 {
4327  const bool is_empty = single_map_.empty() && complex_map_.empty();
4328  if (!is_empty) {
4329  CORBA::ULong largest_index;
4330  if (!get_largest_index_basic(largest_index)) {
4331  return false;
4332  }
4334  size += largest_index + 2; // Include null
4335  } else {
4336  // Use default value for string, i.e., empty string.
4338  size += 1; // For the null termination
4339  }
4340  return true;
4341 }
bool get_largest_index_basic(CORBA::ULong &index) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
ACE_CDR::ULong ULong

◆ serialized_size_string_common() [1/2]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_string_common ( const DCPS::Encoding encoding,
size_t &  size,
const char *  str 
) const

Definition at line 5044 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::char16_cdr_size, OpenDDS::DCPS::primitive_serialized_size_ulong(), and ACE_OS::strlen().

5046 {
5048  if (str) {
5049  size += ACE_OS::strlen(str) + 1; // Include null termination
5050  }
5051 }
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
size_t strlen(const char *s)
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)

◆ serialized_size_string_common() [2/2]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_string_common ( const DCPS::Encoding encoding,
size_t &  size,
const SingleValue sv 
) const

Definition at line 5064 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::SingleValue::kind_, OpenDDS::XTypes::DynamicDataImpl::SingleValue::str_, OpenDDS::XTypes::TK_STRING16, and OpenDDS::XTypes::TK_STRING8.

5066 {
5067  if (sv.kind_ == TK_STRING8) {
5068  serialized_size_string_common(encoding, size, sv.str_);
5069  }
5070 #ifdef DDS_HAS_WCHAR
5071  else if (sv.kind_ == TK_STRING16) {
5072  serialized_size_string_common(encoding, size, sv.wstr_);
5073  }
5074 #endif
5075 }
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const TypeKind TK_STRING8
Definition: TypeObject.h:231
void serialized_size_string_common(const DCPS::Encoding &encoding, size_t &size, const char *str) const

◆ serialized_size_structure()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_structure ( const DCPS::Encoding encoding,
size_t &  size,
DCPS::Sample::Extent  ext 
) const

Definition at line 8089 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Encoding::xcdr_version(), OpenDDS::DCPS::Encoding::XCDR_VERSION_1, and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

Referenced by OpenDDS::XTypes::DynamicDataImpl::serialized_size_i().

8092 {
8094  return serialized_size_structure_xcdr2(encoding, size, ext);
8096  return serialized_size_structure_xcdr1(encoding, size, ext);
8097  }
8098  return false;
8099 }
XcdrVersion xcdr_version() const
Definition: Serializer.inl:127
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
bool serialized_size_structure_xcdr2(const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
bool serialized_size_structure_xcdr1(const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const

◆ serialized_size_structure_xcdr1()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_structure_xcdr1 ( const DCPS::Encoding encoding,
size_t &  size,
DCPS::Sample::Extent  ext 
) const

Definition at line 8076 of file DynamicDataImpl.cpp.

8078 {
8079  // TODO: Support Final & Mutable extensibility?
8080  return false;
8081 }

◆ serialized_size_structure_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_structure_xcdr2 ( const DCPS::Encoding encoding,
size_t &  size,
DCPS::Sample::Extent  ext 
) const

Definition at line 7921 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, OpenDDS::XTypes::DynamicDataBase::exclude_member(), OpenDDS::XTypes::extensibility(), OpenDDS::XTypes::get_base_type(), OpenDDS::XTypes::DynamicDataBase::has_explicit_keys(), DDS::MUTABLE, OpenDDS::XTypes::DynamicDataBase::nested(), DDS::RETCODE_OK, OpenDDS::DCPS::serialized_size_delimiter(), OpenDDS::DCPS::serialized_size_list_end_parameter_id(), struct_has_explicit_keys(), OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_SEQUENCE, and OpenDDS::XTypes::DynamicDataBase::type_.

7923 {
7924  DDS::TypeDescriptor_var descriptor;
7925  if (type_->get_descriptor(descriptor) != DDS::RETCODE_OK) {
7926  return false;
7927  }
7928  const DDS::ExtensibilityKind extensibility = descriptor->extensibility_kind();
7930 
7931  // Delimiter
7932  if (extensibility == DDS::APPENDABLE || extensibility == DDS::MUTABLE) {
7934  }
7935 
7936  // Members
7937  size_t mutable_running_total = 0;
7938  const CORBA::ULong member_count = type_->get_member_count();
7939  for (CORBA::ULong i = 0; i < member_count; ++i) {
7940  DDS::DynamicTypeMember_var dtm;
7941  if (type_->get_member_by_index(dtm, i) != DDS::RETCODE_OK) {
7942  return false;
7943  }
7944  DDS::MemberDescriptor_var md;
7945  if (dtm->get_descriptor(md) != DDS::RETCODE_OK) {
7946  return false;
7947  }
7948 
7949  if (exclude_member(ext, md->is_key(), struct_has_explicit_keys)) {
7950  continue;
7951  }
7952 
7953  const DDS::MemberId id = md->id();
7954  const CORBA::Boolean optional = md->is_optional();
7955  const DDS::DynamicType_var member_type = get_base_type(md->type());
7956  const TypeKind member_tk = member_type->get_kind();
7957 
7958  if (data_->is_basic(member_tk) || member_tk == TK_ENUM || member_tk == TK_BITMASK) {
7959  if (!serialized_size_basic_struct_member_xcdr2(encoding, size, id, member_type, optional,
7960  extensibility, mutable_running_total)) {
7961  return false;
7962  }
7963  continue;
7964  } else if (member_tk == TK_SEQUENCE) {
7965  DDS::TypeDescriptor_var member_td;
7966  if (member_type->get_descriptor(member_td) != DDS::RETCODE_OK) {
7967  return false;
7968  }
7969  const DDS::DynamicType_var elem_type = get_base_type(member_td->element_type());
7970  const TypeKind elem_tk = elem_type->get_kind();
7971  if (data_->is_basic(elem_tk) || elem_tk == TK_ENUM || elem_tk == TK_BITMASK) {
7972  if (!serialized_size_sequence_struct_member_xcdr2(encoding, size, id, elem_tk, optional,
7973  extensibility, mutable_running_total, nested(ext))) {
7974  return false;
7975  }
7976  continue;
7977  }
7978  }
7979 
7980  const_complex_iterator it = complex_map_.find(id);
7981  if (it != complex_map_.end()) {
7983  extensibility, mutable_running_total,
7984  nested(ext))) {
7985  return false;
7986  }
7987  } else if (!serialized_size_complex_aggregated_member_xcdr2_default(encoding, size, member_type, optional,
7988  extensibility, mutable_running_total,
7989  nested(ext))) {
7990  return false;
7991  }
7992  }
7993 
7994  if (extensibility == DDS::MUTABLE) {
7995  serialized_size_list_end_parameter_id(encoding, size, mutable_running_total);
7996  }
7997  return true;
7998 }
ACE_CDR::ULong MemberId
Definition: TypeObject.h:910
const ReturnCode_t RETCODE_OK
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
bool serialized_size_basic_struct_member_xcdr2(const DCPS::Encoding &encoding, size_t &size, DDS::MemberId id, const DDS::DynamicType_var &member_type, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total) const
static bool has_explicit_keys(DDS::DynamicType *dt)
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
ACE_CDR::ULong ULong
bool struct_has_explicit_keys(AST_Structure *node)
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
bool serialized_size_complex_aggregated_member_xcdr2(const DCPS::Encoding &encoding, size_t &size, const_complex_iterator it, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total, DCPS::Sample::Extent ext) const
ACE_CDR::Boolean Boolean
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
bool serialized_size_sequence_struct_member_xcdr2(const DCPS::Encoding &encoding, size_t &size, DDS::MemberId id, TypeKind elem_tk, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total, DCPS::Sample::Extent ext) const
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
const TypeKind TK_ENUM
Definition: TypeObject.h:238
OpenDDS_Dcps_Export void serialized_size_list_end_parameter_id(const Encoding &encoding, size_t &size, size_t &running_size)
static DCPS::Sample::Extent nested(DCPS::Sample::Extent ext)
bool serialized_size_complex_aggregated_member_xcdr2_default(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &member_type, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total, DCPS::Sample::Extent ext) const
static bool exclude_member(DCPS::Sample::Extent ext, bool is_key, bool has_explicit_keys)
bool is_basic(TypeKind tk) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29
ExtensibilityKind

◆ serialized_size_union()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_union ( const DCPS::Encoding encoding,
size_t &  size,
DCPS::Sample::Extent  ext 
) const

Definition at line 8608 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::Encoding::xcdr_version(), OpenDDS::DCPS::Encoding::XCDR_VERSION_1, and OpenDDS::DCPS::Encoding::XCDR_VERSION_2.

Referenced by OpenDDS::XTypes::DynamicDataImpl::serialized_size_i().

8611 {
8613  return serialized_size_union_xcdr2(encoding, size, ext);
8615  return serialized_size_union_xcdr1(encoding, size, ext);
8616  }
8617  return false;
8618 }
XcdrVersion xcdr_version() const
Definition: Serializer.inl:127
bool serialized_size_union_xcdr2(const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
bool serialized_size_union_xcdr1(const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const

◆ serialized_size_union_xcdr1()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_union_xcdr1 ( const DCPS::Encoding encoding,
size_t &  size,
DCPS::Sample::Extent  ext 
) const

Definition at line 8595 of file DynamicDataImpl.cpp.

8597 {
8598  // TODO:
8599  return false;
8600 }

◆ serialized_size_union_xcdr2()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_union_xcdr2 ( const DCPS::Encoding encoding,
size_t &  size,
DCPS::Sample::Extent  ext 
) const

Definition at line 8423 of file DynamicDataImpl.cpp.

References DDS::APPENDABLE, OpenDDS::XTypes::DISCRIMINATOR_ID, OpenDDS::XTypes::extensibility(), OpenDDS::DCPS::Sample::Full, OpenDDS::XTypes::get_base_type(), OpenDDS::XTypes::DynamicDataBase::has_explicit_keys(), OpenDDS::DCPS::Sample::KeyOnly, OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::MUTABLE, DDS::RETCODE_OK, OpenDDS::DCPS::serialized_size_delimiter(), OpenDDS::DCPS::serialized_size_list_end_parameter_id(), and OpenDDS::XTypes::DynamicDataBase::type_.

8425 {
8426  if (ext == DCPS::Sample::KeyOnly && !has_explicit_keys(type_)) {
8427  // nothing is serialized (not even a delimiter) for key-only serialization when there is no @key
8428  return true;
8429  }
8430 
8431  DDS::TypeDescriptor_var descriptor;
8432  if (type_->get_descriptor(descriptor) != DDS::RETCODE_OK) {
8433  return false;
8434  }
8435  const DDS::ExtensibilityKind extensibility = descriptor->extensibility_kind();
8436  if (extensibility == DDS::APPENDABLE || extensibility == DDS::MUTABLE) {
8438  }
8439 
8440  size_t mutable_running_total = 0;
8441  DDS::DynamicType_var disc_type = get_base_type(descriptor->discriminator_type());
8442  if (ext != DCPS::Sample::Full) {
8444  extensibility, mutable_running_total)) {
8445  return false;
8446  }
8447  serialized_size_list_end_parameter_id(encoding, size, mutable_running_total);
8448  return true;
8449  }
8450 
8451  const_single_iterator single_it = single_map_.find(DISCRIMINATOR_ID);
8452  const_complex_iterator complex_it = complex_map_.find(DISCRIMINATOR_ID);
8453  const bool has_disc = single_it != single_map_.end() || complex_it != complex_map_.end();
8454  const DDS::MemberId selected_id = data_->find_selected_member();
8455 
8456  CORBA::Long disc_value;
8457  if (has_disc) {
8458  if (!get_discriminator_value(disc_value, single_it, complex_it, disc_type)) {
8459  return false;
8460  }
8461  } else if (!set_default_discriminator_value(disc_value, disc_type)) {
8462  return false;
8463  }
8464 
8465  if (selected_id == MEMBER_ID_INVALID) {
8466  bool found_selected_member = false;
8467  DDS::MemberDescriptor_var selected_md;
8468  if (!select_union_member(disc_value, found_selected_member, selected_md)) {
8469  return false;
8470  }
8472  extensibility, mutable_running_total)) {
8473  return false;
8474  }
8475  if (found_selected_member) {
8476  DDS::DynamicType_var selected_type = get_base_type(selected_md->type());
8477  const bool optional = selected_md->is_optional();
8478  if (!serialized_size_complex_aggregated_member_xcdr2_default(encoding, size, selected_type, optional,
8479  extensibility, mutable_running_total,
8480  DCPS::Sample::Full)) {
8481  return false;
8482  }
8483  }
8484  serialized_size_list_end_parameter_id(encoding, size, mutable_running_total);
8485  return true;
8486  }
8487 
8489  extensibility, mutable_running_total) ||
8490  !serialized_size_selected_member_xcdr2(encoding, size, selected_id,
8491  extensibility, mutable_running_total)) {
8492  return false;
8493  }
8494  serialized_size_list_end_parameter_id(encoding, size, mutable_running_total);
8495  return true;
8496 }
ACE_CDR::Long Long
ACE_CDR::ULong MemberId
Definition: TypeObject.h:910
const ReturnCode_t RETCODE_OK
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
const ACE_CDR::ULong DISCRIMINATOR_ID
Implementation specific sentinel for a union discriminator used in DynamicData.
Definition: TypeObject.h:913
static bool has_explicit_keys(DDS::DynamicType *dt)
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
bool serialized_size_discriminator_member_xcdr2(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &disc_type, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total) const
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
bool serialized_size_selected_member_xcdr2(const DCPS::Encoding &encoding, size_t &size, DDS::MemberId selected_id, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total) const
bool select_union_member(CORBA::Long disc_value, bool &found_selected_member, DDS::MemberDescriptor_var &selected_md) const
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
bool set_default_discriminator_value(CORBA::Long &value, const DDS::DynamicType_var &disc_type) const
DDS::MemberId find_selected_member() const
OpenDDS_Dcps_Export void serialized_size_list_end_parameter_id(const Encoding &encoding, size_t &size, size_t &running_size)
bool serialized_size_complex_aggregated_member_xcdr2_default(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &member_type, bool optional, DDS::ExtensibilityKind extensibility, size_t &mutable_running_total, DCPS::Sample::Extent ext) const
bool get_discriminator_value(CORBA::Long &value, const_single_iterator single_it, const_complex_iterator complex_it, const DDS::DynamicType_var &disc_type) const
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29
ExtensibilityKind

◆ serialized_size_wstring()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_wstring ( const DCPS::Encoding encoding,
size_t &  size 
) const

◆ set_default_basic_value() [1/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( CORBA::Long value) const

◆ set_default_basic_value() [2/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( CORBA::ULong value) const

Definition at line 4532 of file DynamicDataImpl.cpp.

4533 {
4534  value = 0;
4535 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_default_basic_value() [3/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( ACE_OutputCDR::from_int8 value) const

Definition at line 4537 of file DynamicDataImpl.cpp.

References ACE_OutputCDR::from_int8::val_.

4538 {
4539  value.val_ = 0;
4540 }

◆ set_default_basic_value() [4/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( ACE_OutputCDR::from_uint8 value) const

Definition at line 4542 of file DynamicDataImpl.cpp.

References ACE_OutputCDR::from_uint8::val_.

4543 {
4544  value.val_ = 0;
4545 }

◆ set_default_basic_value() [5/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( CORBA::Short value) const

Definition at line 4547 of file DynamicDataImpl.cpp.

4548 {
4549  value = 0;
4550 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_default_basic_value() [6/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( CORBA::UShort value) const

Definition at line 4552 of file DynamicDataImpl.cpp.

4553 {
4554  value = 0;
4555 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_default_basic_value() [7/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( CORBA::LongLong value) const

Definition at line 4557 of file DynamicDataImpl.cpp.

4558 {
4559  value = 0;
4560 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_default_basic_value() [8/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( CORBA::ULongLong value) const

Definition at line 4562 of file DynamicDataImpl.cpp.

4563 {
4564  value = 0;
4565 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_default_basic_value() [9/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( CORBA::Float value) const

Definition at line 4567 of file DynamicDataImpl.cpp.

4568 {
4569  value = 0;
4570 }

◆ set_default_basic_value() [10/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( CORBA::Double value) const

Definition at line 4572 of file DynamicDataImpl.cpp.

4573 {
4574  value = 0;
4575 }

◆ set_default_basic_value() [11/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( CORBA::LongDouble value) const

Definition at line 4577 of file DynamicDataImpl.cpp.

References ACE_CDR::LongDouble::ld, and ACE_OS::memset().

4578 {
4579 #if ACE_SIZEOF_LONG_DOUBLE == 16
4580  value = 0;
4581 #else
4582  ACE_OS::memset(value.ld, 0, 16);
4583 #endif
4584 }
void * memset(void *s, int c, size_t len)

◆ set_default_basic_value() [12/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( ACE_OutputCDR::from_char value) const

Definition at line 4586 of file DynamicDataImpl.cpp.

References ACE_OutputCDR::from_char::val_.

4587 {
4588  value.val_ = '\0';
4589 }

◆ set_default_basic_value() [13/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( ACE_OutputCDR::from_octet value) const

Definition at line 4591 of file DynamicDataImpl.cpp.

References ACE_OutputCDR::from_octet::val_.

4592 {
4593  value.val_ = 0x00;
4594 }

◆ set_default_basic_value() [14/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( const char *&  value) const

Definition at line 4596 of file DynamicDataImpl.cpp.

4597 {
4598  value = "";
4599 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_default_basic_value() [15/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( char *&  value) const

Definition at line 4601 of file DynamicDataImpl.cpp.

References CORBA::string_dup(), and CORBA::string_free().

4602 {
4604  value = CORBA::string_dup("");
4605 }
const LogLevel::Value value
Definition: debug.cpp:61
char * string_dup(const char *)
void string_free(char *)

◆ set_default_basic_value() [16/16]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value ( ACE_OutputCDR::from_boolean value) const

◆ set_default_bitmask_value() [1/5]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_bitmask_value ( ACE_OutputCDR::from_uint8 value) const

◆ set_default_bitmask_value() [2/5]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_bitmask_value ( CORBA::UShort value) const

Definition at line 4651 of file DynamicDataImpl.cpp.

4652 {
4653  value = 0;
4654 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_default_bitmask_value() [3/5]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_bitmask_value ( CORBA::ULong value) const

Definition at line 4656 of file DynamicDataImpl.cpp.

4657 {
4658  value = 0;
4659 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_default_bitmask_value() [4/5]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_bitmask_value ( CORBA::ULongLong value) const

Definition at line 4661 of file DynamicDataImpl.cpp.

4662 {
4663  value = 0;
4664 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_default_bitmask_value() [5/5]

template<typename Type >
void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_bitmask_value ( Type &  value) const

Definition at line 4667 of file DynamicDataImpl.cpp.

4668 {
4669  // No-op. Should never be called.
4670 }

◆ set_default_bitmask_values()

template<typename CollectionType >
void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_bitmask_values ( CollectionType &  col) const

Definition at line 5358 of file DynamicDataImpl.cpp.

5359 {
5360  // Table 9 doesn't mention default value for bitmask. Use 0 as default here.
5361  for (CORBA::ULong i = 0; i < col.length(); ++i) {
5362  col[i] = 0;
5363  }
5364 }
ACE_CDR::ULong ULong

◆ set_default_discriminator_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_discriminator_value ( CORBA::Long value,
const DDS::DynamicType_var &  disc_type 
) const

Definition at line 8113 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, OpenDDS::XTypes::TK_UINT8, ACE_OutputCDR::from_boolean::val_, ACE_OutputCDR::from_octet::val_, ACE_OutputCDR::from_int8::val_, ACE_OutputCDR::from_uint8::val_, ACE_OutputCDR::from_char::val_, and ACE_OutputCDR::from_wchar::val_.

Referenced by OpenDDS::XTypes::DynamicDataImpl::get_complex_from_union(), and OpenDDS::XTypes::DynamicDataImpl::get_item_count().

8115 {
8116  const TypeKind disc_tk = disc_type->get_kind();
8117  switch (disc_tk) {
8118  case TK_BOOLEAN: {
8119  ACE_OutputCDR::from_boolean val(false);
8121  value = static_cast<CORBA::Long>(val.val_);
8122  return true;
8123  }
8124  case TK_BYTE: {
8125  ACE_OutputCDR::from_octet val(0x00);
8127  value = static_cast<CORBA::Long>(val.val_);
8128  return true;
8129  }
8130  case TK_CHAR8: {
8131  ACE_OutputCDR::from_char val('\0');
8133  value = static_cast<CORBA::Long>(val.val_);
8134  return true;
8135  }
8136 #ifdef DDS_HAS_WCHAR
8137  case TK_CHAR16: {
8140  value = static_cast<CORBA::Long>(val.val_);
8141  return true;
8142  }
8143 #endif
8144  case TK_INT8: {
8145  ACE_OutputCDR::from_int8 val(0);
8147  value = static_cast<CORBA::Long>(val.val_);
8148  return true;
8149  }
8150  case TK_UINT8: {
8153  value = static_cast<CORBA::Long>(val.val_);
8154  return true;
8155  }
8156  case TK_INT16: {
8157  CORBA::Short val;
8159  value = static_cast<CORBA::Long>(val);
8160  return true;
8161  }
8162  case TK_UINT16: {
8163  CORBA::UShort val;
8165  value = static_cast<CORBA::Long>(val);
8166  return true;
8167  }
8168  case TK_INT32: {
8170  return true;
8171  }
8172  case TK_UINT32: {
8173  CORBA::ULong val;
8175  value = static_cast<CORBA::Long>(val);
8176  return true;
8177  }
8178  case TK_INT64: {
8179  CORBA::LongLong val;
8181  value = static_cast<CORBA::Long>(val);
8182  return true;
8183  }
8184  case TK_UINT64: {
8185  CORBA::ULongLong val;
8187  value = static_cast<CORBA::Long>(val);
8188  return true;
8189  }
8190  case TK_ENUM: {
8191  return set_default_enum_value(disc_type, value);
8192  }
8193  }
8194  return false;
8195 }
ACE_CDR::Long Long
bool set_default_enum_value(const DDS::DynamicType_var &dt, CORBA::Long &value) const
const TypeKind TK_INT8
Definition: TypeObject.h:225
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
ACE_CDR::LongLong LongLong
ACE_CDR::Short Short
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
ACE_CDR::ULongLong ULongLong
const TypeKind TK_UINT16
Definition: TypeObject.h:219
ACE_CDR::ULong ULong
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const TypeKind TK_INT16
Definition: TypeObject.h:216
ACE_CDR::UShort UShort
void set_default_basic_value(CORBA::Long &value) const
const TypeKind TK_ENUM
Definition: TypeObject.h:238
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210

◆ set_default_enum_value()

bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_enum_value ( const DDS::DynamicType_var &  dt,
CORBA::Long value 
) const

Definition at line 4630 of file DynamicDataImpl.cpp.

References DDS::RETCODE_OK.

Referenced by OpenDDS::XTypes::DynamicDataImpl::clear_value_i(), and OpenDDS::XTypes::DynamicDataImpl::get_value_from_enum().

4632 {
4633  // Default enum value is the first enumerator.
4634  DDS::DynamicTypeMember_var first_dtm;
4635  if (enum_type->get_member_by_index(first_dtm, 0) != DDS::RETCODE_OK) {
4636  return false;
4637  }
4638  DDS::MemberDescriptor_var first_md;
4639  if (first_dtm->get_descriptor(first_md) != DDS::RETCODE_OK) {
4640  return false;
4641  }
4642  value = static_cast<CORBA::Long>(first_md->id());
4643  return true;
4644 }
ACE_CDR::Long Long
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_OK

◆ set_default_enum_values()

template<typename ElementType , typename CollectionType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_enum_values ( CollectionType &  collection,
const DDS::DynamicType_var &  enum_type 
) const

Definition at line 5165 of file DynamicDataImpl.cpp.

References value.

5167 {
5169  if (!set_default_enum_value(enum_type, value)) {
5170  return false;
5171  }
5172  for (CORBA::ULong i = 0; i < collection.length(); ++i) {
5173  collection[i] = static_cast<ElementType>(value);
5174  }
5175  return true;
5176 }
ACE_CDR::Long Long
bool set_default_enum_value(const DDS::DynamicType_var &dt, CORBA::Long &value) const
const LogLevel::Value value
Definition: debug.cpp:61
ACE_CDR::ULong ULong

◆ set_default_primitive_values() [1/6]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_primitive_values ( DDS::Int8Seq collection) const

Definition at line 4672 of file DynamicDataImpl.cpp.

References ACE_OutputCDR::from_int8::val_, and value.

Referenced by set_default_primitive_values().

4673 {
4674  for (CORBA::ULong i = 0; i < collection.length(); ++i) {
4677  collection[i] = value.val_;
4678  }
4679 }
const LogLevel::Value value
Definition: debug.cpp:61
ACE_CDR::ULong ULong
void set_default_basic_value(CORBA::Long &value) const

◆ set_default_primitive_values() [2/6]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_primitive_values ( DDS::UInt8Seq collection) const

Definition at line 4681 of file DynamicDataImpl.cpp.

References ACE_OutputCDR::from_uint8::val_, and value.

4682 {
4683  for (CORBA::ULong i = 0; i < collection.length(); ++i) {
4686  collection[i] = value.val_;
4687  }
4688 }
const LogLevel::Value value
Definition: debug.cpp:61
ACE_CDR::ULong ULong
void set_default_basic_value(CORBA::Long &value) const

◆ set_default_primitive_values() [3/6]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_primitive_values ( DDS::CharSeq collection) const

Definition at line 4690 of file DynamicDataImpl.cpp.

References ACE_OutputCDR::from_char::val_, and value.

4691 {
4692  for (CORBA::ULong i = 0; i < collection.length(); ++i) {
4695  collection[i] = value.val_;
4696  }
4697 }
const LogLevel::Value value
Definition: debug.cpp:61
ACE_CDR::ULong ULong
void set_default_basic_value(CORBA::Long &value) const

◆ set_default_primitive_values() [4/6]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_primitive_values ( DDS::ByteSeq collection) const

Definition at line 4699 of file DynamicDataImpl.cpp.

References ACE_OutputCDR::from_octet::val_, and value.

4700 {
4701  for (CORBA::ULong i = 0; i < collection.length(); ++i) {
4704  collection[i] = value.val_;
4705  }
4706 }
const LogLevel::Value value
Definition: debug.cpp:61
ACE_CDR::ULong ULong
void set_default_basic_value(CORBA::Long &value) const

◆ set_default_primitive_values() [5/6]

void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_primitive_values ( DDS::BooleanSeq collection) const

Definition at line 4708 of file DynamicDataImpl.cpp.

References set_default_primitive_values(), ACE_OutputCDR::from_wchar::val_, ACE_OutputCDR::from_boolean::val_, and value.

4709 {
4710  for (CORBA::ULong i = 0; i < collection.length(); ++i) {
4713  collection[i] = value.val_;
4714  }
4715 }
const LogLevel::Value value
Definition: debug.cpp:61
ACE_CDR::ULong ULong
void set_default_basic_value(CORBA::Long &value) const

◆ set_default_primitive_values() [6/6]

template<typename CollectionType >
void OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_primitive_values ( CollectionType &  collection) const

Definition at line 4729 of file DynamicDataImpl.cpp.

4730 {
4731  for (CORBA::ULong i = 0; i < collection.length(); ++i) {
4732  set_default_basic_value(collection[i]);
4733  }
4734 }
ACE_CDR::ULong ULong
void set_default_basic_value(CORBA::Long &value) const

◆ set_primitive_values() [1/6]

template<typename ElementType , typename CollectionType >
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_primitive_values ( CollectionType &  collection,
CORBA::ULong  bound,
const ElementType &  elem_tag 
) const

Definition at line 4914 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::container_, and OpenDDS::XTypes::MEMBER_ID_INVALID.

Referenced by set_primitive_values().

4916 {
4917  for (const_single_iterator it = single_map_.begin(); it != single_map_.end(); ++it) {
4918  CORBA::ULong index;
4919  if (!data_->get_index_from_id(it->first, index, bound)) {
4920  return false;
4921  }
4922  collection[index] = it->second.get<ElementType>();
4923  }
4924 
4925  for (const_complex_iterator it = complex_map_.begin(); it != complex_map_.end(); ++it) {
4926  CORBA::ULong index;
4927  if (!data_->get_index_from_id(it->first, index, bound)) {
4928  return false;
4929  }
4930  const DynamicDataImpl* elem_dd = dynamic_cast<const DynamicDataImpl*>(it->second.in());
4931  if (!elem_dd) {
4932  return false;
4933  }
4934  const_single_iterator elem_it = elem_dd->container_.single_map_.find(MEMBER_ID_INVALID);
4935  if (elem_it != elem_dd->container_.single_map_.end()) {
4936  collection[index] = elem_it->second.get<ElementType>();
4937  }
4938  }
4939  return true;
4940 }
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
DynamicDataImpl(DDS::DynamicType_ptr type)
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const

◆ set_primitive_values() [2/6]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_primitive_values ( DDS::BooleanSeq collection,
CORBA::ULong  bound,
const ACE_OutputCDR::from_boolean  
) const

Definition at line 4738 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::container_, and OpenDDS::XTypes::MEMBER_ID_INVALID.

4740 {
4741  for (const_single_iterator it = single_map_.begin(); it != single_map_.end(); ++it) {
4742  CORBA::ULong index;
4743  if (!data_->get_index_from_id(it->first, index, bound)) {
4744  return false;
4745  }
4746  collection[index] = it->second.get<ACE_OutputCDR::from_boolean>().val_;
4747  }
4748 
4749  for (const_complex_iterator it = complex_map_.begin(); it != complex_map_.end(); ++it) {
4750  CORBA::ULong index;
4751  if (!data_->get_index_from_id(it->first, index, bound)) {
4752  return false;
4753  }
4754  const DynamicDataImpl* elem_dd = dynamic_cast<const DynamicDataImpl*>(it->second.in());
4755  if (!elem_dd) {
4756  return false;
4757  }
4758  const_single_iterator elem_it = elem_dd->container_.single_map_.find(MEMBER_ID_INVALID);
4759  if (elem_it != elem_dd->container_.single_map_.end()) {
4760  collection[index] = elem_it->second.get<ACE_OutputCDR::from_boolean>().val_;
4761  }
4762  }
4763  return true;
4764 }
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
DynamicDataImpl(DDS::DynamicType_ptr type)
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const

◆ set_primitive_values() [3/6]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_primitive_values ( DDS::ByteSeq collection,
CORBA::ULong  bound,
const ACE_OutputCDR::from_octet  
) const

Definition at line 4767 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::container_, and OpenDDS::XTypes::MEMBER_ID_INVALID.

4769 {
4770  for (const_single_iterator it = single_map_.begin(); it != single_map_.end(); ++it) {
4771  CORBA::ULong index;
4772  if (!data_->get_index_from_id(it->first, index, bound)) {
4773  return false;
4774  }
4775  collection[index] = it->second.get<ACE_OutputCDR::from_octet>().val_;
4776  }
4777 
4778  for (const_complex_iterator it = complex_map_.begin(); it != complex_map_.end(); ++it) {
4779  CORBA::ULong index;
4780  if (!data_->get_index_from_id(it->first, index, bound)) {
4781  return false;
4782  }
4783  const DynamicDataImpl* elem_dd = dynamic_cast<const DynamicDataImpl*>(it->second.in());
4784  if (!elem_dd) {
4785  return false;
4786  }
4787  const_single_iterator elem_it = elem_dd->container_.single_map_.find(MEMBER_ID_INVALID);
4788  if (elem_it != elem_dd->container_.single_map_.end()) {
4789  collection[index] = elem_it->second.get<ACE_OutputCDR::from_octet>().val_;
4790  }
4791  }
4792  return true;
4793 }
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
DynamicDataImpl(DDS::DynamicType_ptr type)
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const

◆ set_primitive_values() [4/6]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_primitive_values ( DDS::Int8Seq collection,
CORBA::ULong  bound,
const ACE_OutputCDR::from_int8  
) const

Definition at line 4796 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::container_, and OpenDDS::XTypes::MEMBER_ID_INVALID.

4798 {
4799  for (const_single_iterator it = single_map_.begin(); it != single_map_.end(); ++it) {
4800  CORBA::ULong index;
4801  if (!data_->get_index_from_id(it->first, index, bound)) {
4802  return false;
4803  }
4804  collection[index] = it->second.get<ACE_OutputCDR::from_int8>().val_;
4805  }
4806 
4807  for (const_complex_iterator it = complex_map_.begin(); it != complex_map_.end(); ++it) {
4808  CORBA::ULong index;
4809  if (!data_->get_index_from_id(it->first, index, bound)) {
4810  return false;
4811  }
4812  const DynamicDataImpl* elem_dd = dynamic_cast<const DynamicDataImpl*>(it->second.in());
4813  if (!elem_dd) {
4814  return false;
4815  }
4816  const_single_iterator elem_it = elem_dd->container_.single_map_.find(MEMBER_ID_INVALID);
4817  if (elem_it != elem_dd->container_.single_map_.end()) {
4818  collection[index] = elem_it->second.get<ACE_OutputCDR::from_int8>().val_;
4819  }
4820  }
4821  return true;
4822 }
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
DynamicDataImpl(DDS::DynamicType_ptr type)
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const

◆ set_primitive_values() [5/6]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_primitive_values ( DDS::UInt8Seq collection,
CORBA::ULong  bound,
const ACE_OutputCDR::from_uint8  
) const

Definition at line 4825 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::container_, and OpenDDS::XTypes::MEMBER_ID_INVALID.

4827 {
4828  for (const_single_iterator it = single_map_.begin(); it != single_map_.end(); ++it) {
4829  CORBA::ULong index;
4830  if (!data_->get_index_from_id(it->first, index, bound)) {
4831  return false;
4832  }
4833  collection[index] = it->second.get<ACE_OutputCDR::from_uint8>().val_;
4834  }
4835 
4836  for (const_complex_iterator it = complex_map_.begin(); it != complex_map_.end(); ++it) {
4837  CORBA::ULong index;
4838  if (!data_->get_index_from_id(it->first, index, bound)) {
4839  return false;
4840  }
4841  const DynamicDataImpl* elem_dd = dynamic_cast<const DynamicDataImpl*>(it->second.in());
4842  if (!elem_dd) {
4843  return false;
4844  }
4845  const_single_iterator elem_it = elem_dd->container_.single_map_.find(MEMBER_ID_INVALID);
4846  if (elem_it != elem_dd->container_.single_map_.end()) {
4847  collection[index] = elem_it->second.get<ACE_OutputCDR::from_uint8>().val_;
4848  }
4849  }
4850  return true;
4851 }
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
DynamicDataImpl(DDS::DynamicType_ptr type)
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const

◆ set_primitive_values() [6/6]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_primitive_values ( DDS::CharSeq collection,
CORBA::ULong  bound,
const ACE_OutputCDR::from_char  
) const

Definition at line 4854 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataImpl::container_, OpenDDS::XTypes::MEMBER_ID_INVALID, and set_primitive_values().

4856 {
4857  for (const_single_iterator it = single_map_.begin(); it != single_map_.end(); ++it) {
4858  CORBA::ULong index;
4859  if (!data_->get_index_from_id(it->first, index, bound)) {
4860  return false;
4861  }
4862  collection[index] = it->second.get<ACE_OutputCDR::from_char>().val_;
4863  }
4864 
4865  for (const_complex_iterator it = complex_map_.begin(); it != complex_map_.end(); ++it) {
4866  CORBA::ULong index;
4867  if (!data_->get_index_from_id(it->first, index, bound)) {
4868  return false;
4869  }
4870  const DynamicDataImpl* elem_dd = dynamic_cast<const DynamicDataImpl*>(it->second.in());
4871  if (!elem_dd) {
4872  return false;
4873  }
4874  const_single_iterator elem_it = elem_dd->container_.single_map_.find(MEMBER_ID_INVALID);
4875  if (elem_it != elem_dd->container_.single_map_.end()) {
4876  collection[index] = elem_it->second.get<ACE_OutputCDR::from_char>().val_;
4877  }
4878  }
4879  return true;
4880 }
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
ACE_CDR::ULong ULong
DynamicDataImpl(DDS::DynamicType_ptr type)
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const

Member Data Documentation

◆ data_

const DynamicDataImpl* OpenDDS::XTypes::DynamicDataImpl::DataContainer::data_

Definition at line 977 of file DynamicDataImpl.h.

◆ type_

const DDS::DynamicType_var& OpenDDS::XTypes::DynamicDataImpl::DataContainer::type_

Definition at line 976 of file DynamicDataImpl.h.


The documentation for this struct was generated from the following files: