6 #ifndef OPENDDS_DCPS_XTYPES_DYNAMIC_DATA_IMPL_H 7 #define OPENDDS_DCPS_XTYPES_DYNAMIC_DATA_IMPL_H 9 #ifndef OPENDDS_SAFETY_PROFILE 20 class DynamicDataImpl;
27 bool operator<<(Serializer& ser,
const XTypes::DynamicDataImpl& data);
29 bool serialized_size(
const Encoding&
encoding,
size_t& size,
const KeyOnly<const XTypes::DynamicDataImpl>& data);
31 bool operator<<(Serializer& ser, const KeyOnly<const XTypes::DynamicDataImpl>& data);
50 DDS::DynamicData_ptr clone();
138 DDS::DynamicData_ptr value);
225 #ifndef OPENDDS_NO_CONTENT_SUBSCRIPTION_PROFILE 230 #ifndef OPENDDS_NO_CONTENT_SUBSCRIPTION_PROFILE 233 template<
typename ValueType>
258 bool read_basic_value(
char*& value)
const;
267 template<
typename ValueType>
268 void cast_to_enum_value(ValueType& dst,
CORBA::Long src)
const;
271 template<
typename ValueType>
272 bool read_basic_in_single_map(ValueType& value,
DDS::MemberId id);
274 template<
typename ValueType>
275 bool read_basic_in_complex_map(ValueType& value,
DDS::MemberId id);
277 template<
typename ValueType>
280 template<
typename ValueType>
281 bool get_value_from_self(ValueType& value,
DDS::MemberId id);
283 template<TypeKind ValueTypeKind,
typename ValueType>
284 bool get_value_from_enum(ValueType& value,
DDS::MemberId id);
286 template<TypeKind ValueTypeKind,
typename ValueType>
287 bool get_value_from_bitmask(ValueType& value,
DDS::MemberId id);
289 template<TypeKind ValueTypeKind,
typename ValueType>
290 bool get_value_from_struct(ValueType& value,
DDS::MemberId id);
292 template<TypeKind ValueTypeKind,
typename ValueType>
293 bool get_value_from_union(ValueType& value,
DDS::MemberId id);
295 template<TypeKind ValueTypeKind,
typename ValueType>
296 bool get_value_from_collection(ValueType& value,
DDS::MemberId id);
298 template<TypeKind CharKind, TypeKind StringKind,
typename FromCharT,
typename CharT>
301 template<
typename UIntType>
304 template<TypeKind MemberTypeKind,
typename MemberType>
305 bool set_value_to_struct(
DDS::MemberId id,
const MemberType& value);
322 template<
typename MemberType>
323 bool cast_to_discriminator_value(
CORBA::Long& disc_value,
const MemberType& value)
const;
325 template<TypeKind MemberTypeKind,
typename MemberType>
326 bool set_value_to_union(
DDS::MemberId id,
const MemberType& value,
329 template<TypeKind ElementTypeKind,
typename ElementType>
330 bool set_value_to_collection(
DDS::MemberId id,
const ElementType& value,
333 template<TypeKind ValueTypeKind,
typename ValueType>
337 template<TypeKind CharKind, TypeKind StringKind,
typename FromCharT>
341 static bool is_valid_discriminator_type(
TypeKind tk);
343 bool read_discriminator(
CORBA::Long& disc_val)
const;
345 bool validate_discriminator(
CORBA::Long disc_val,
const DDS::MemberDescriptor_var& md)
const;
347 bool set_complex_to_struct(
DDS::MemberId id, DDS::DynamicData_var value);
348 bool set_complex_to_union(
DDS::MemberId id, DDS::DynamicData_var value);
362 template<
typename SingleType>
363 bool insert_single(
DDS::MemberId id,
const SingleType& value);
365 bool insert_complex(
DDS::MemberId id,
const DDS::DynamicData_var& value);
367 template<
typename SequenceType>
368 bool insert_sequence(
DDS::MemberId id,
const SequenceType& value);
370 template<TypeKind ElementTypeKind>
373 template<TypeKind ElementTypeKind>
377 template<TypeKind ElementTypeKind,
typename SequenceType>
378 bool set_values_to_struct(
DDS::MemberId id,
const SequenceType& value,
381 template<TypeKind ElementTypeKind,
typename SequenceType>
382 bool set_values_to_union(
DDS::MemberId id,
const SequenceType& value,
385 template<TypeKind ElementTypeKind,
typename SequenceType>
386 bool set_values_to_sequence(
DDS::MemberId id,
const SequenceType& value,
389 template<TypeKind ElementTypeKind,
typename SequenceType>
390 bool set_values_to_array(
DDS::MemberId id,
const SequenceType& value,
393 template<TypeKind ElementTypeKind,
typename SequenceType>
398 template<TypeKind ValueTypeKind,
typename ValueType>
427 template<
typename T>
const T&
get()
const;
432 char* get_string()
const;
488 template<
typename T>
const T&
get()
const;
493 #define SEQUENCE_VALUE_MEMBER(T, N) unsigned char N ## _[sizeof(T)] 513 #undef SEQUENCE_VALUE_MEMBER 517 SequenceValue& operator=(
const SequenceValue& rhs);
532 , type_desc_(data->type_desc_)
537 : single_map_(other.single_map_)
538 , sequence_map_(other.sequence_map_)
539 , complex_map_(other.complex_map_)
541 , type_desc_(data->type_desc_)
550 bool get_largest_single_index(
CORBA::ULong& index)
const;
551 bool get_largest_sequence_index(
CORBA::ULong& index)
const;
552 bool get_largest_complex_index(
CORBA::ULong& index)
const;
556 bool get_largest_index_basic(
CORBA::ULong& index)
const;
561 bool get_largest_index_basic_sequence(
CORBA::ULong& index)
const;
565 template<
typename PrimitiveType>
566 bool serialize_primitive_value(
DCPS::Serializer& ser, PrimitiveType default_value)
const;
568 size_t& size,
const DDS::DynamicType_var& enum_type)
const;
570 const DDS::DynamicType_var& enum_type)
const;
573 size_t& size,
const DDS::DynamicType_var& bitmask_type)
const;
575 const DDS::DynamicType_var& bitmask_type)
const;
577 bool reconstruct_string_value(
CORBA::Char* str)
const;
578 bool serialized_size_string(
const DCPS::Encoding& encoding,
size_t& size)
const;
580 bool reconstruct_wstring_value(
CORBA::WChar* wstr)
const;
581 bool serialized_size_wstring(
const DCPS::Encoding& encoding,
size_t& size)
const;
583 void serialized_size_primitive_sequence(
const DCPS::Encoding& encoding,
size_t& size,
586 void set_default_basic_value(
CORBA::Long& value)
const;
587 void set_default_basic_value(
CORBA::ULong& value)
const;
590 void set_default_basic_value(
CORBA::Short& value)
const;
594 void set_default_basic_value(
CORBA::Float& value)
const;
599 void set_default_basic_value(
const char*& value)
const;
600 void set_default_basic_value(
char*& value)
const;
604 void set_default_basic_value(
const CORBA::WChar*& value)
const;
605 void set_default_basic_value(
CORBA::WChar*& value)
const;
608 bool set_default_enum_value(
const DDS::DynamicType_var& dt,
CORBA::Long& value)
const;
612 void set_default_bitmask_value(
CORBA::ULong& value)
const;
615 template<
typename Type>
616 void set_default_bitmask_value(Type& value)
const;
618 void set_default_primitive_values(
DDS::Int8Seq& collection)
const;
619 void set_default_primitive_values(
DDS::UInt8Seq& collection)
const;
620 void set_default_primitive_values(
DDS::CharSeq& collection)
const;
621 void set_default_primitive_values(
DDS::ByteSeq& collection)
const;
624 void set_default_primitive_values(
DDS::WcharSeq& collection)
const;
627 template<
typename CollectionType>
628 void set_default_primitive_values(CollectionType& collection)
const;
630 template<
typename ElementType,
typename CollectionType>
631 bool set_primitive_values(CollectionType& collection,
CORBA::ULong bound,
632 const ElementType& elem_tag)
const;
634 template<
typename ElementType,
typename CollectionType>
635 bool reconstruct_primitive_collection(CollectionType& collection,
641 void serialized_size_string_common(
const DCPS::Encoding& encoding,
size_t& size,
642 const char* str)
const;
644 void serialized_size_string_common(
const DCPS::Encoding& encoding,
size_t& size,
647 void serialized_size_string_common(
const DCPS::Encoding& encoding,
size_t& size,
650 template<
typename StringType>
651 bool serialized_size_generic_string_collection(
const DCPS::Encoding& encoding,
size_t& size,
652 const IndexToIdMap& index_to_id)
const;
653 template<
typename StringType>
654 bool serialized_size_generic_string_sequence(
const DCPS::Encoding& encoding,
size_t& size,
655 const IndexToIdMap& index_to_id)
const;
656 template<
typename StringType>
658 const IndexToIdMap& index_to_id)
const;
659 template<
typename StringType>
663 template<
typename ElementType,
typename CollectionType>
664 bool set_default_enum_values(CollectionType& collection,
665 const DDS::DynamicType_var& enum_type)
const;
667 template<
typename ElementType,
typename WrapElementType,
typename CollectionType>
668 bool reconstruct_enum_collection(CollectionType& collection,
CORBA::ULong size,
669 CORBA::ULong bound,
const DDS::DynamicType_var& enum_type,
const WrapElementType& elem_tag)
const;
671 void serialized_size_enum_sequence_as_int8s(
const DCPS::Encoding& encoding,
size_t& size,
673 void serialized_size_enum_sequence(
const DCPS::Encoding& encoding,
size_t& size,
677 CORBA::ULong bound,
const DDS::DynamicType_var& enum_type)
const;
678 void serialized_size_enum_sequence_as_int16s(
const DCPS::Encoding& encoding,
size_t& size,
680 void serialized_size_enum_sequence(
const DCPS::Encoding& encoding,
size_t& size,
684 CORBA::ULong bound,
const DDS::DynamicType_var& enum_type)
const;
685 void serialized_size_enum_sequence_as_int32s(
const DCPS::Encoding& encoding,
size_t& size,
687 void serialized_size_enum_sequence(
const DCPS::Encoding& encoding,
size_t& size,
691 CORBA::ULong bound,
const DDS::DynamicType_var& enum_type)
const;
693 void serialized_size_enum_sequence(
const DCPS::Encoding& encoding,
size_t& size,
696 CORBA::ULong seqbound,
const DDS::DynamicType_var& enum_type)
const;
698 template<
typename CollectionType>
699 void set_default_bitmask_values(CollectionType& col)
const;
701 template<
typename WrapElementType,
typename CollectionType>
702 bool reconstruct_bitmask_collection(CollectionType& collection,
CORBA::ULong size,
703 CORBA::ULong bound,
const WrapElementType& elem_tag)
const;
704 void serialized_size_bitmask_sequence_as_uint8s(
const DCPS::Encoding& encoding,
706 void serialized_size_bitmask_sequence(
const DCPS::Encoding& encoding,
size_t& size,
712 void serialized_size_bitmask_sequence_as_uint16s(
const DCPS::Encoding& encoding,
size_t& size,
714 void serialized_size_bitmask_sequence(
const DCPS::Encoding& encoding,
size_t& size,
720 void serialized_size_bitmask_sequence_as_uint32s(
const DCPS::Encoding& encoding,
size_t& size,
722 void serialized_size_bitmask_sequence(
const DCPS::Encoding& encoding,
size_t& size,
728 void serialized_size_bitmask_sequence_as_uint64s(
const DCPS::Encoding& encoding,
size_t& size,
730 void serialized_size_bitmask_sequence(
const DCPS::Encoding& encoding,
size_t& size,
736 void serialized_size_bitmask_sequence(
const DCPS::Encoding& encoding,
size_t& size,
741 bool serialized_size_sequence_value(
const DCPS::Encoding& encoding,
size_t& size,
744 bool get_index_to_id_map(IndexToIdMap& index_to_id,
CORBA::ULong bound)
const;
745 bool serialized_size_complex_member_i(
const DCPS::Encoding& encoding,
size_t& size,
748 template<
typename SequenceType>
749 bool serialized_size_nested_basic_sequences(
const DCPS::Encoding& encoding,
size_t& size,
750 const IndexToIdMap& index_to_id, SequenceType protoseq)
const;
752 template<
typename SequenceType>
753 bool serialized_size_nesting_basic_sequence(
const DCPS::Encoding& encoding,
size_t& size,
754 const IndexToIdMap& index_to_id, SequenceType protoseq)
const;
758 template<
typename SequenceType>
759 bool serialize_nested_basic_sequences(
DCPS::Serializer& ser,
const IndexToIdMap& index_to_id,
760 SequenceType protoseq)
const;
762 template<
typename SequenceType>
766 bool serialized_size_nesting_basic_sequence(
const DCPS::Encoding& encoding,
size_t& size,
767 TypeKind nested_elem_tk,
const IndexToIdMap& index_to_id)
const;
770 bool serialized_size_nested_enum_sequences(
const DCPS::Encoding& encoding,
size_t& size,
771 const IndexToIdMap& index_to_id)
const;
772 bool serialized_size_nesting_enum_sequence(
const DCPS::Encoding& encoding,
size_t& size,
773 const IndexToIdMap& index_to_id)
const;
774 bool serialize_nested_enum_sequences(
DCPS::Serializer& ser,
const IndexToIdMap& index_to_id)
const;
777 bool serialized_size_nested_bitmask_sequences(
const DCPS::Encoding& encoding,
size_t& size,
778 const IndexToIdMap& index_to_id)
const;
779 bool serialized_size_nesting_bitmask_sequence(
const DCPS::Encoding& encoding,
size_t& size,
780 const IndexToIdMap& index_to_id)
const;
782 const IndexToIdMap& index_to_id)
const;
785 bool serialized_size_complex_member(
const DCPS::Encoding& encoding,
size_t& size,
788 bool serialized_size_complex_sequence(
const DCPS::Encoding& encoding,
size_t& size,
789 const IndexToIdMap& index_to_id,
const DDS::DynamicType_var& elem_type,
DCPS::Sample::Extent ext)
const;
790 bool serialize_complex_sequence_i(
DCPS::Serializer& ser,
const IndexToIdMap& index_to_id,
794 bool get_index_to_id_from_complex(IndexToIdMap& index_to_id,
CORBA::ULong bound)
const;
799 void serialized_size_primitive_array(
const DCPS::Encoding& encoding,
size_t& size,
803 template<
typename StringType>
804 bool serialized_size_generic_string_array(
const DCPS::Encoding& encoding,
size_t& size,
805 const IndexToIdMap& index_to_id)
const;
806 template<
typename StringType>
808 void serialized_size_enum_array_as_int8s(
const DCPS::Encoding& encoding,
size_t& size,
812 const DDS::DynamicType_var& enum_type)
const;
813 void serialized_size_enum_array_as_int16s(
const DCPS::Encoding& encoding,
size_t& size,
817 const DDS::DynamicType_var& enum_type)
const;
818 void serialized_size_enum_array_as_int32s(
const DCPS::Encoding& encoding,
size_t& size,
822 const DDS::DynamicType_var& enum_type)
const;
823 void serialized_size_enum_array(
const DCPS::Encoding& encoding,
size_t& size,
826 const DDS::DynamicType_var& enum_type)
const;
828 void serialized_size_bitmask_array_as_uint8s(
const DCPS::Encoding& encoding,
size_t& size,
833 void serialized_size_bitmask_array_as_uint16s(
const DCPS::Encoding& encoding,
size_t& size,
838 void serialized_size_bitmask_array_as_uint32s(
const DCPS::Encoding& encoding,
size_t& size,
843 void serialized_size_bitmask_array_as_uint64s(
const DCPS::Encoding& encoding,
size_t& size,
848 void serialized_size_bitmask_array(
const DCPS::Encoding& encoding,
size_t& size,
853 template<
typename SequenceType>
854 bool serialized_size_nesting_basic_array(
const DCPS::Encoding& encoding,
size_t& size,
855 const IndexToIdMap& index_to_id, SequenceType protoseq)
const;
857 template<
typename SequenceType>
859 SequenceType protoseq)
const;
860 bool serialized_size_nesting_basic_array(
const DCPS::Encoding& encoding,
size_t& size,
861 TypeKind nested_elem_tk,
const IndexToIdMap& index_to_id)
const;
864 bool serialized_size_nesting_enum_array(
const DCPS::Encoding& encoding,
size_t& size,
865 const IndexToIdMap& index_to_id)
const;
867 bool serialized_size_nesting_bitmask_array(
const DCPS::Encoding& encoding,
size_t& size,
868 const IndexToIdMap& index_to_id)
const;
870 bool serialized_size_complex_array(
const DCPS::Encoding& encoding,
size_t& size,
871 const IndexToIdMap& index_to_id,
const DDS::DynamicType_var& elem_type,
DCPS::Sample::Extent ext)
const;
877 bool serialized_size_primitive_member(
const DCPS::Encoding& encoding,
size_t& size,
880 bool serialized_size_basic_member_default_value(
const DCPS::Encoding& encoding,
size_t& size,
882 bool serialized_size_basic_member(
const DCPS::Encoding& encoding,
size_t& size,
883 TypeKind member_tk, const_single_iterator it)
const;
886 bool serialized_size_single_aggregated_member_xcdr2(
const DCPS::Encoding& encoding,
size_t& size,
887 const_single_iterator it,
const DDS::DynamicType_var& member_type,
bool optional,
889 bool serialize_single_aggregated_member_xcdr2(
DCPS::Serializer& ser, const_single_iterator it,
890 const DDS::DynamicType_var& member_type,
bool optional,
bool must_understand,
892 bool serialized_size_complex_aggregated_member_xcdr2_default(
const DCPS::Encoding& encoding,
893 size_t& size,
const DDS::DynamicType_var& member_type,
bool optional,
896 const DDS::DynamicType_var& member_type,
bool optional,
bool must_understand,
898 bool serialized_size_complex_aggregated_member_xcdr2(
const DCPS::Encoding& encoding,
size_t& size,
901 bool serialize_complex_aggregated_member_xcdr2(
DCPS::Serializer& ser, const_complex_iterator it,
903 bool serialized_size_basic_struct_member_xcdr2(
const DCPS::Encoding& encoding,
size_t& size,
904 DDS::MemberId id,
const DDS::DynamicType_var& member_type,
bool optional,
907 const DDS::DynamicType_var& member_type,
bool optional,
bool must_understand,
910 void serialized_size_sequence_member_default_value(
const DCPS::Encoding& encoding,
911 size_t& size,
TypeKind elem_tk)
const;
914 bool serialized_size_basic_sequence(
const DCPS::Encoding& encoding,
size_t& size,
915 const_sequence_iterator it)
const;
916 bool serialize_basic_sequence(
DCPS::Serializer& ser, const_sequence_iterator it)
const;
917 bool serialized_size_enum_sequence(
const DCPS::Encoding& encoding,
size_t& size,
918 const_sequence_iterator it)
const;
919 bool serialize_enum_sequence(
DCPS::Serializer& ser, const_sequence_iterator it)
const;
920 bool serialized_size_bitmask_sequence(
const DCPS::Encoding& encoding,
size_t& size,
921 const_sequence_iterator it)
const;
922 bool serialize_bitmask_sequence(
DCPS::Serializer& ser, const_sequence_iterator it)
const;
923 void serialized_size_sequence_aggregated_member_xcdr2(
const DCPS::Encoding& encoding,
924 size_t& size, const_sequence_iterator it,
TypeKind elem_tk,
bool optional,
926 bool serialize_sequence_aggregated_member_xcdr2(
DCPS::Serializer& ser, const_sequence_iterator it,
928 bool serialized_size_sequence_struct_member_xcdr2(
const DCPS::Encoding& encoding,
size_t& size,
937 bool serialized_size_structure(
const DCPS::Encoding& encoding,
size_t& size,
941 bool set_default_discriminator_value(
CORBA::Long& value,
942 const DDS::DynamicType_var& disc_type)
const;
943 bool get_discriminator_value(
CORBA::Long& value, const_single_iterator single_it,
944 const_complex_iterator complex_it,
const DDS::DynamicType_var& disc_type)
const;
945 bool serialized_size_discriminator_member_xcdr2(
const DCPS::Encoding& encoding,
size_t& size,
947 size_t& mutable_running_total)
const;
950 bool serialized_size_selected_member_xcdr2(
const DCPS::Encoding& encoding,
size_t& size,
952 size_t& mutable_running_total)
const;
959 bool serialized_size_union(
const DCPS::Encoding& encoding,
size_t& size,
974 bool move_single_to_complex(
const DataContainer::const_single_iterator& it,
976 bool move_single_to_complex_i(
const DataContainer::const_single_iterator& it,
979 template<
typename SequenceType>
980 void move_sequence_helper(
const DataContainer::const_sequence_iterator& it,
984 bool move_sequence_to_complex(
const DataContainer::const_sequence_iterator& it,
990 bool get_complex_from_aggregated(DDS::DynamicData_var& value,
DDS::MemberId id,
993 bool get_complex_from_struct(DDS::DynamicData_ptr& value,
DDS::MemberId id);
996 bool get_complex_from_union(DDS::DynamicData_ptr& value,
DDS::MemberId id);
997 bool get_complex_from_collection(DDS::DynamicData_ptr& value,
DDS::MemberId id);
999 bool read_discriminator(
CORBA::Long& disc_val,
const DDS::DynamicType_var& disc_type,
1000 DataContainer::const_single_iterator it)
const;
1005 void clear_container();
1022 bool DCPS::operator<<(DCPS::Serializer& ser, const DCPS::KeyOnly<const DynamicDataImpl>& data);
1030 #endif // OPENDDS_SAFETY_PROFILE 1032 #endif // OPENDDS_DCPS_XTYPES_DYNAMIC_DATA_IMPL_H
sequence< unsigned short > UInt16Seq
sequence< long > Int32Seq
sequence< wchar > WcharSeq
const LogLevel::Value value
CORBA::Boolean operator<<(TAO_OutputCDR &, const CORBA::Object *)
sequence< long long > Int64Seq
ACE_CDR::LongLong LongLong
#define OpenDDS_Dcps_Export
CORBA::LongDouble float128_
DataContainer(const DataContainer &other, const DynamicDataImpl *data)
void serialized_size(const Encoding &encoding, size_t &size, const SequenceNumber &)
ACE_CDR::ULongLong ULongLong
sequence< short > Int16Seq
const DynamicDataImpl * data_
sequence< unsigned long long > UInt64Seq
sequence< boolean > BooleanSeq
typedef OPENDDS_VECTOR(MemberPair) MatchedSet
Class to serialize and deserialize data for DDS.
ACE_CDR::Boolean operator<<(Serializer &serializer, CoherentChangeControl &value)
Marshal/Insertion into a buffer.
sequence< uint8 > UInt8Seq
sequence< octet > ByteSeq
sequence< unsigned long > UInt32Seq
sequence< long double > Float128Seq
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)
const DDS::TypeDescriptor_var & type_desc_
sequence< float > Float32Seq
sequence< wstring > WstringSeq
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
typedef OPENDDS_MAP(TypeIdentifier, TypeObject) TypeMap
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
sequence< double > Float64Seq
The Internal API and Implementation of OpenDDS.
const DDS::DynamicType_var & type_
#define SEQUENCE_VALUE_MEMBER(T, N)
sequence< string > StringSeq
extensibility(MUTABLE) struct TypeLookup_getTypes_In