8 #ifndef OPENDDS_SAFETY_PROFILE 19 # include <dds/DdsDcpsCoreTypeSupportImpl.h> 20 # include <dds/DdsDcpsInfrastructureC.h> 21 # include <dds/DdsDynamicDataSeqTypeSupportImpl.h> 22 # include <dds/CorbaSeq/LongSeqTypeSupportImpl.h> 23 # include <dds/CorbaSeq/ULongSeqTypeSupportImpl.h> 24 # include <dds/CorbaSeq/Int8SeqTypeSupportImpl.h> 25 # include <dds/CorbaSeq/UInt8SeqTypeSupportImpl.h> 26 # include <dds/CorbaSeq/ShortSeqTypeSupportImpl.h> 27 # include <dds/CorbaSeq/UShortSeqTypeSupportImpl.h> 28 # include <dds/CorbaSeq/LongLongSeqTypeSupportImpl.h> 29 # include <dds/CorbaSeq/ULongLongSeqTypeSupportImpl.h> 30 # include <dds/CorbaSeq/FloatSeqTypeSupportImpl.h> 31 # include <dds/CorbaSeq/DoubleSeqTypeSupportImpl.h> 32 # include <dds/CorbaSeq/LongDoubleSeqTypeSupportImpl.h> 33 # include <dds/CorbaSeq/CharSeqTypeSupportImpl.h> 34 # include <dds/CorbaSeq/WCharSeqTypeSupportImpl.h> 35 # include <dds/CorbaSeq/OctetSeqTypeSupportImpl.h> 36 # include <dds/CorbaSeq/BooleanSeqTypeSupportImpl.h> 37 # include <dds/CorbaSeq/StringSeqTypeSupportImpl.h> 38 # include <dds/CorbaSeq/WStringSeqTypeSupportImpl.h> 54 , extent_(DCPS::
Sample::Full)
55 , reset_align_state_(false)
57 , item_count_(ITEM_COUNT_INVALID)
62 DDS::DynamicType_ptr
type,
65 ,
chain_(chain->duplicate())
74 throw std::runtime_error(
"DynamicDataXcdrReadImpl only supports XCDR1 and XCDR2");
81 ,
chain_(ser.current()->duplicate())
91 throw std::runtime_error(
"DynamicDataXcdrReadImpl only supports XCDR1 and XCDR2");
111 if (
this != &other) {
147 for (
unsigned i = 0; i < count; ++i) {
148 DDS::DynamicTypeMember_var member;
152 DDS::MemberDescriptor_var descriptor;
156 if (descriptor->is_optional()) {
161 has_optional =
false;
199 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::get_member_id_at_index:" 214 DDS::TypeDescriptor_var descriptor;
233 if (struct_has_explicit_keys) {
238 DDS::DynamicTypeMember_var dtm;
242 DDS::MemberDescriptor_var md;
249 if (curr_index == index) {
263 DDS::DynamicTypeMember_var member;
267 return member->get_id();
276 total_skipped += num_skipped;
277 if (total_skipped == index + 1) {
278 DDS::DynamicTypeMember_var member;
280 id = member->get_id();
290 bool must_understand;
292 for (
unsigned i = 0; i < index; ++i) {
298 DDS::DynamicTypeMember_var dtm;
303 DDS::MemberDescriptor_var descriptor;
308 const DDS::DynamicType_ptr mt = descriptor->type();
334 DDS::DynamicTypeMember_var disc_dtm;
338 DDS::MemberDescriptor_var disc_md;
342 if (!disc_md->is_key()) {
363 return selected_md->id();
382 DDS::TypeDescriptor_var descriptor;
410 if (!(
strm_ >> bytes)) {
416 return descriptor->bound()[0];
426 if (struct_has_explicit_keys) {
429 DDS::DynamicTypeMember_var dtm;
433 DDS::MemberDescriptor_var md;
441 return num_explicit_keys;
449 return type_->get_member_count();
467 actual_count += num_skipped;
475 const size_t end_of_struct =
strm_.
rpos() + dheader;
479 bool must_understand;
485 DDS::DynamicTypeMember_var dtm;
490 DDS::MemberDescriptor_var descriptor;
495 const DDS::DynamicType_ptr mt = descriptor->type();
518 DDS::DynamicTypeMember_var disc_dtm;
522 DDS::MemberDescriptor_var disc_md;
526 if (!disc_md->is_key()) {
540 const DDS::DynamicType_var disc_type =
get_base_type(descriptor->discriminator_type());
547 DDS::DynamicTypeMembersById_var members;
556 DDS::MemberDescriptor_var md;
560 if (md->is_default_label()) {
565 if (label == labels[i]) {
574 const DDS::DynamicType_var elem_type =
get_base_type(descriptor->element_type());
581 if (!(
strm_ >> length)) {
590 const DDS::DynamicType_var key_type =
get_base_type(descriptor->key_element_type());
591 const DDS::DynamicType_var elem_type =
get_base_type(descriptor->element_type());
595 if (!(
strm_ >> length)) {
605 const size_t end_of_map =
strm_.
rpos() + dheader;
643 ACE_ERROR((
LM_ERROR,
"(%P|%t) ERROR: DynamicDataXcdrReadImpl::loan_value: Not implemented\n"));
649 ACE_ERROR((
LM_ERROR,
"(%P|%t) ERROR: DynamicDataXcdrReadImpl::return_loaned_value: Not implemented\n"));
659 template<
typename ValueType>
680 if (
strm_ >> value) {
703 DDS::DynamicTypeMember_var dtm;
706 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::exclude_struct_member:" 707 " Failed to get DynamicTypeMember for member with ID %d\n",
id));
714 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::exclude_struct_member:" 715 " Failed to get MemberDescriptor for member with ID %d\n",
id));
722 template<TypeKind MemberTypeKind,
typename MemberType>
726 DDS::MemberDescriptor_var md;
729 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::get_value_from_struct:" 730 " Attempted to read an excluded member from a %C sample\n",
746 const DDS::DynamicType_ptr member_type = md->type();
748 DDS::TypeDescriptor_var td;
753 const LBound bit_bound = td->bound()[0];
754 if (bit_bound >= lower && bit_bound <= upper) {
771 DDS::TypeDescriptor_var descriptor;
783 const DDS::DynamicType_var disc_type =
get_base_type(descriptor->discriminator_type());
789 DDS::DynamicTypeMembersById_var members;
798 bool has_default =
false;
799 DDS::MemberDescriptor_var default_member;
801 DDS::MemberDescriptor_var md;
807 if (label == labels[i]) {
812 if (md->is_default_label()) {
819 return default_member._retn();;
832 ACE_TEXT(
" MemberDescriptor for the selected union member\n"), func_name));
844 if (md->id() != id) {
847 ACE_TEXT(
" ID of the selected member (%d) is not the requested ID (%d)\n"),
848 func_name, md->id(), id));
868 DDS::DynamicTypeMember_var disc_dtm;
871 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::exclude_union_member:" 872 " Failed to get DynamicTypeMember for discriminator\n"));
876 DDS::MemberDescriptor_var disc_md;
879 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::exclude_union_member:" 880 " Failed to get MemberDescriptor for discriminator\n"));
884 if (!disc_md->is_key()) {
891 template<TypeKind MemberTypeKind,
typename MemberType>
897 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::get_value_from_union:" 898 " Reading an excluded member with Id %u\n",
id));
903 DDS::TypeDescriptor_var descriptor;
909 DDS::DynamicType_var member_type;
917 member_type =
get_base_type(descriptor->discriminator_type());
924 const DDS::DynamicType_ptr
type = md->type();
928 ACE_TEXT(
" Could not get DynamicType of the selected member\n")));
935 const TypeKind member_tk = member_type->get_kind();
936 if (member_tk != MemberTypeKind && member_tk != enum_or_bitmask) {
939 ACE_TEXT(
" Could not read a value of type %C from type %C\n"),
948 bool must_understand;
954 if (member_tk == MemberTypeKind) {
958 DDS::TypeDescriptor_var td;
959 rc = member_type->get_descriptor(td);
963 const LBound bit_bound = td->bound()[0];
964 return bit_bound >= lower && bit_bound <= upper &&
970 DDS::TypeDescriptor_var descriptor;
975 DDS::DynamicType_var elem_type;
980 DDS::TypeDescriptor_var descriptor;
990 return (
strm_ >> length) &&
1014 DDS::TypeDescriptor_var descriptor;
1019 DDS::DynamicType_var elem_type;
1021 DDS::TypeDescriptor_var coll_descriptor;
1064 DDS::TypeDescriptor_var descriptor;
1069 const DDS::DynamicType_var key_type =
get_base_type(descriptor->key_element_type());
1070 const DDS::DynamicType_var elem_type =
get_base_type(descriptor->element_type());
1092 const size_t end_of_map =
strm_.
rpos() + dheader;
1103 template<TypeKind ElementTypeKind,
typename ElementType>
1107 DDS::TypeDescriptor_var descriptor;
1112 DDS::DynamicType_var elem_type =
get_base_type(descriptor->element_type());
1113 const TypeKind elem_tk = elem_type->get_kind();
1115 if (elem_tk != ElementTypeKind && elem_tk != enum_or_bitmask) {
1118 ACE_TEXT(
" Could not read a value of type %C from %C with element type %C\n"),
1125 if (elem_tk == enum_or_bitmask) {
1126 DDS::TypeDescriptor_var td;
1130 const LBound bit_bound = td->bound()[0];
1131 if (bit_bound < lower || bit_bound > upper) {
1136 switch (collection_tk) {
1167 template<TypeKind ValueTypeKind,
typename ValueType>
1182 if (tk == enum_or_bitmask) {
1187 DDS::TypeDescriptor_var descriptor;
1191 const LBound bit_bound = descriptor->bound()[0];
1192 good = bit_bound >= lower && bit_bound <= upper &&
read_value(value, ValueTypeKind);
1201 get_value_from_struct<ValueTypeKind>(
value, id, enum_or_bitmask, lower, upper);
1211 get_value_from_union<ValueTypeKind>(
value, id, enum_or_bitmask, lower, upper);
1221 good = get_value_from_collection<ValueTypeKind>(
value, id, tk, enum_or_bitmask, lower, upper);
1231 ACE_TEXT(
" Failed to read a value of %C from a DynamicData object of type %C\n"),
1240 static_cast<LBound>(17), static_cast<LBound>(32));
1246 static_cast<LBound>(17), static_cast<LBound>(32));
1252 return get_single_value<TK_INT8>(to_int8, id,
TK_ENUM, 1, 8);
1258 return get_single_value<TK_UINT8>(to_uint8, id,
TK_BITMASK, 1, 8);
1263 return get_single_value<TK_INT16>(
value, id,
TK_ENUM, 9, 16);
1273 return get_single_value<TK_INT64>(
value, id);
1283 return get_single_value<TK_FLOAT32>(
value, id);
1288 return get_single_value<TK_FLOAT64>(
value, id);
1293 return get_single_value<TK_FLOAT128>(
value, id);
1296 template<TypeKind CharKind, TypeKind StringKind,
typename ToCharT,
typename CharT>
1307 ToCharT wrap(value);
1308 good =
strm_ >> wrap;
1314 if (!(
strm_ >> str)) {
1317 ACE_TEXT(
" Failed to read wstring with ID %d\n"),
id));
1327 ACE_TEXT(
" ID %d is not valid in a string (or wstring) with length %d\n"),
1338 ToCharT wrap(value);
1348 ToCharT wrap(value);
1360 ToCharT wrap(value);
1361 good = get_value_from_collection<CharKind>(wrap, id, tk);
1378 return get_char_common<TK_CHAR8, TK_STRING8, ACE_InputCDR::to_char>(
value, id);
1383 #ifdef DDS_HAS_WCHAR 1384 return get_char_common<TK_CHAR16, TK_STRING16, ACE_InputCDR::to_wchar>(
value, id);
1393 return get_single_value<TK_BYTE>(to_octet, id);
1396 template<
typename UIntType, TypeKind UIntTypeKind>
1404 value = ((1ULL << index) & bitmask) ? true :
false;
1421 DDS::TypeDescriptor_var descriptor;
1425 const LBound bit_bound = descriptor->bound()[0];
1430 ACE_TEXT(
" Id %d is not valid in a bitmask with bit_bound %d\n"),
1438 if (bit_bound >= 1 && bit_bound <= 8) {
1444 value = ((1 << index) & bitmask) ? true :
false;
1446 }
else if (bit_bound >= 9 && bit_bound <= 16) {
1447 good = get_boolean_from_bitmask<ACE_CDR::UInt16, TK_UINT16>(index,
value);
1448 }
else if (bit_bound >= 17 && bit_bound <= 32) {
1449 good = get_boolean_from_bitmask<ACE_CDR::UInt32, TK_UINT32>(index,
value);
1451 good = get_boolean_from_bitmask<ACE_CDR::UInt64, TK_UINT64>(index,
value);
1457 ACE_InputCDR::to_boolean to_bool(value);
1467 ACE_InputCDR::to_boolean to_bool(value);
1479 ACE_InputCDR::to_boolean to_bool(value);
1480 good = get_value_from_collection<TK_BOOLEAN>(to_bool, id, tk);
1501 return get_single_value<TK_STRING8>(
value, id);
1506 #ifdef DDS_HAS_WCHAR 1508 return get_single_value<TK_STRING16>(
value, id);
1518 DDS::TypeDescriptor_var descriptor;
1529 DDS::MemberDescriptor_var md;
1533 " Attempted to read an excluded member from a %C struct sample\n",
1543 DDS::DynamicType_ptr member_type = md->type();
1560 " Attempted to read an excluded member from a %C union sample\n",
1575 const DDS::DynamicType_var disc_type =
get_base_type(descriptor->discriminator_type());
1576 if (descriptor->extensibility_kind() ==
DDS::MUTABLE) {
1579 bool must_understand;
1596 if (descriptor->extensibility_kind() ==
DDS::MUTABLE) {
1599 bool must_understand;
1605 const DDS::DynamicType_ptr member_type = md->type();
1639 template<
typename SequenceType>
1642 using OpenDDS::DCPS::operator>>;
1662 if (
strm_ >> value) {
1687 template<TypeKind ElementTypeKind,
typename SequenceType>
1691 DDS::MemberDescriptor_var md;
1694 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::get_values_from_struct:" 1695 " Attempted to read a member not included in a %C sample\n",
1710 const DDS::DynamicType_ptr member_type = md->type();
1712 DDS::TypeDescriptor_var td;
1717 DDS::TypeDescriptor_var etd;
1722 const LBound bit_bound = etd->bound()[0];
1723 if (bit_bound >= lower && bit_bound <= upper) {
1738 template<TypeKind ElementTypeKind,
typename SequenceType>
1744 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::get_values_from_union:" 1745 " Attempted to read discriminator as a sequence\n"));
1752 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::get_values_from_union:" 1753 " Attempted to read an excluded member with Id %u\n",
id));
1763 const DDS::DynamicType_ptr member_type = md->type();
1767 ACE_TEXT(
" Could not get DynamicType of the selected member\n")));
1772 DDS::DynamicType_var selected_type =
get_base_type(member_type);
1773 const TypeKind selected_tk = selected_type->get_kind();
1777 ACE_TEXT(
" The selected member is not a sequence, but %C\n"),
1783 DDS::TypeDescriptor_var td;
1787 const DDS::DynamicType_var elem_type =
get_base_type(td->element_type());
1788 const TypeKind elem_tk = elem_type->get_kind();
1789 if (elem_tk != ElementTypeKind && elem_tk != enum_or_bitmask) {
1792 ACE_TEXT(
" Could not read a sequence of %C from a sequence of %C\n"),
1798 DDS::TypeDescriptor_var descriptor;
1803 if (descriptor->extensibility_kind() ==
DDS::MUTABLE) {
1806 bool must_understand;
1812 if (elem_tk == ElementTypeKind) {
1821 const LBound bit_bound = td->bound()[0];
1822 return bit_bound >= lower && bit_bound <= upper &&
read_values(value, enum_or_bitmask);
1825 template<TypeKind ElementTypeKind,
typename SequenceType>
1829 DDS::TypeDescriptor_var descriptor;
1834 const DDS::DynamicType_var elem_type =
get_base_type(descriptor->element_type());
1835 const TypeKind elem_tk = elem_type->get_kind();
1837 if (elem_tk == ElementTypeKind) {
1839 }
else if (elem_tk == enum_or_bitmask) {
1841 DDS::TypeDescriptor_var td;
1845 const LBound bit_bound = td->bound()[0];
1846 return bit_bound >= lower && bit_bound <= upper &&
read_values(value, enum_or_bitmask);
1848 DDS::TypeDescriptor_var td;
1852 const DDS::DynamicType_var nested_elem_type =
get_base_type(td->element_type());
1853 const TypeKind nested_elem_tk = nested_elem_type->get_kind();
1854 if (nested_elem_tk == ElementTypeKind) {
1857 }
else if (nested_elem_tk == enum_or_bitmask) {
1859 DDS::TypeDescriptor_var td;
1863 const LBound bit_bound = td->bound()[0];
1864 return bit_bound >= lower && bit_bound <= upper &&
1871 ACE_TEXT(
" Could not read a sequence of %C from an incompatible type\n"),
1877 template<TypeKind ElementTypeKind,
typename SequenceType>
1881 DDS::TypeDescriptor_var descriptor;
1886 const DDS::DynamicType_var elem_type =
get_base_type(descriptor->element_type());
1890 ACE_TEXT(
" Could not read a sequence of %C from an array of %C\n"),
1896 DDS::TypeDescriptor_var td;
1900 const DDS::DynamicType_var nested_elem_type =
get_base_type(td->element_type());
1901 const TypeKind nested_elem_tk = nested_elem_type->get_kind();
1902 if (nested_elem_tk == ElementTypeKind) {
1904 }
else if (nested_elem_tk == enum_or_bitmask) {
1905 DDS::TypeDescriptor_var td;
1909 const LBound bit_bound = td->bound()[0];
1910 return bit_bound >= lower && bit_bound <= upper &&
1916 ACE_TEXT(
" Could not read a sequence of %C from an array of sequence of %C\n"),
1922 template<TypeKind ElementTypeKind,
typename SequenceType>
1926 DDS::TypeDescriptor_var descriptor;
1931 const DDS::DynamicType_var elem_type =
get_base_type(descriptor->element_type());
1935 ACE_TEXT(
" Getting sequence<%C> from a map with element type of %C\n"),
1941 DDS::TypeDescriptor_var td;
1945 const DDS::DynamicType_var nested_elem_type =
get_base_type(td->element_type());
1946 const TypeKind nested_elem_tk = nested_elem_type->get_kind();
1947 if (nested_elem_tk == ElementTypeKind) {
1949 }
else if (nested_elem_tk == enum_or_bitmask) {
1950 DDS::TypeDescriptor_var td;
1954 const LBound bit_bound = td->bound()[0];
1955 return bit_bound >= lower && bit_bound <= upper &&
1961 ACE_TEXT(
" Could not read a sequence of %C from a map with element type sequence of %C\n"),
1967 template<TypeKind ElementTypeKind,
typename SequenceType>
1984 get_values_from_struct<ElementTypeKind>(
value, id, enum_or_bitmask, lower, upper);
1992 good = get_values_from_union<ElementTypeKind>(
value, id, enum_or_bitmask, lower, upper);
1995 good = get_values_from_sequence<ElementTypeKind>(
value, id, enum_or_bitmask, lower, upper);
1998 good = get_values_from_array<ElementTypeKind>(
value, id, enum_or_bitmask, lower, upper);
2001 good = get_values_from_map<ElementTypeKind>(
value, id, enum_or_bitmask, lower, upper);
2006 ACE_TEXT(
" A sequence<%C> can't be read as a member of type %C"),
2014 ACE_TEXT(
" Failed to read sequence<%C> from a DynamicData object of type %C\n"),
2022 return get_sequence_values<TK_INT32>(
value, id,
TK_ENUM, 17, 32);
2032 return get_sequence_values<TK_INT8>(
value, id,
TK_ENUM, 1, 8);
2042 return get_sequence_values<TK_INT16>(
value, id,
TK_ENUM, 9, 16);
2052 return get_sequence_values<TK_INT64>(
value, id);
2062 return get_sequence_values<TK_FLOAT32>(
value, id);
2067 return get_sequence_values<TK_FLOAT64>(
value, id);
2072 return get_sequence_values<TK_FLOAT128>(
value, id);
2077 return get_sequence_values<TK_CHAR8>(
value, id);
2082 #ifdef DDS_HAS_WCHAR 2083 return get_sequence_values<TK_CHAR16>(
value, id);
2091 return get_sequence_values<TK_BYTE>(
value, id);
2096 return get_sequence_values<TK_BOOLEAN>(
value, id);
2101 return get_sequence_values<TK_STRING8>(
value, id);
2106 #ifdef DDS_HAS_WCHAR 2107 return get_sequence_values<TK_STRING16>(
value, id);
2115 return DDS::DynamicType::_duplicate(
type_);
2120 DynamicTypeNameSet dtns;
2127 ACE_ERROR((
LM_ERROR,
"(%P|%t) ERROR: DynamicDataXcdrReadImpl::equals: Not implemented\n"));
2133 DDS::TypeDescriptor_var descriptor;
2146 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::skip_to_struct_member: " 2147 "Failed to read DHEADER for member ID %d\n",
id));
2151 const size_t end_of_struct =
strm_.
rpos() + dheader;
2154 DDS::DynamicTypeMember_var dtm;
2155 rc =
type_->get_member_by_index(dtm, i);
2158 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::skip_to_struct_member:" 2159 " Failed to get DynamicTypeMember for member at index %d\n", i));
2163 DDS::MemberDescriptor_var md;
2164 rc = dtm->get_descriptor(md);
2167 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::skip_to_struct_member:" 2168 " Failed to get MemberDescriptor for member at index %d\n", i));
2181 ACE_TEXT(
" Failed to skip member at index %d\n"), i));
2185 if (xcdr2_appendable &&
strm_.
rpos() >= end_of_struct) {
2195 ACE_TEXT(
" Failed to read DHEADER for member ID %d\n"),
id));
2200 const size_t end_of_struct =
strm_.
rpos() + dheader;
2205 ACE_TEXT(
" Could not find a member with ID %d\n"),
id));
2212 bool must_understand;
2216 ACE_TEXT(
" Failed to read EMHEADER while finding member ID %d\n"),
id));
2221 if (member_id ==
id) {
2228 ACE_TEXT(
" Failed to skip a member with ID %d\n"), member_id));
2239 const DDS::DynamicType_ptr member_dt = md->type();
2243 ACE_TEXT(
" Could not get DynamicType for member with ID %d\n"),
id));
2248 const DDS::DynamicType_var member_type =
get_base_type(member_dt);
2249 const TypeKind member_kind = member_type->get_kind();
2251 if ((!is_sequence && member_kind != kind) || (is_sequence && member_kind !=
TK_SEQUENCE)) {
2254 ACE_TEXT(
" Member with ID %d has kind %C, not %C\n"),
2262 DDS::TypeDescriptor_var member_td;
2266 ACE_TEXT(
" Could not get type descriptor for member %d\n"),
2272 if (elem_kind != kind) {
2275 ACE_TEXT(
" Member with ID %d is a sequence of %C, not %C\n"),
2287 DDS::DynamicTypeMember_var member;
2291 ACE_TEXT(
" Failed to get DynamicTypeMember for member index %d\n"), index));
2296 DDS::MemberDescriptor_var md;
2313 const DDS::DynamicType_ptr member_type = md->type();
2319 const DDS::DynamicType_var member_type =
get_base_type(type);
2320 const TypeKind member_kind = member_type->get_kind();
2322 switch (member_kind) {
2328 if (!
skip(
"skip_member",
"Failed to skip a member of size 1 byte", 1, 1)) {
2335 if (!
skip(
"skip_member",
"Failed to skip a member of size 2 bytes", 1, 2)) {
2342 if (!
skip(
"skip_member",
"Failed to skip a member of size 4 bytes", 1, 4)) {
2349 if (!
skip(
"skip_member",
"Failed to skip a member of size 8 bytes", 1, 8)) {
2354 if (!
skip(
"skip_member",
"Failed to skip a member of size 16 bytes", 1, 16)) {
2361 const char* str_kind = member_kind ==
TK_STRING8 ?
"string" :
"wstring";
2363 if (!(
strm_ >> bytes)) {
2366 ACE_TEXT(
" Failed to read length of a %C member\n"), str_kind));
2372 if (!
skip(
"skip_member", err_msg.c_str(), bytes)) {
2380 DDS::TypeDescriptor_var member_td;
2385 const char* err_msg = member_kind ==
TK_ENUM ?
2386 "Failed to skip an enum member" :
"Failed to skip a bitmask member";
2388 if (bit_bound >= 1 && bit_bound <= 8) {
2389 if (!
skip(
"skip_member", err_msg, 1, 1)) {
2392 }
else if (bit_bound >= 9 && bit_bound <= 16) {
2393 if (!
skip(
"skip_member", err_msg, 1, 2)) {
2396 }
else if (bit_bound >= 17 && bit_bound <= 32) {
2397 if (!
skip(
"skip_member", err_msg, 1, 4)) {
2400 }
else if (bit_bound >= 33 && bit_bound <= 64 && member_kind ==
TK_BITMASK) {
2401 if (!
skip(
"skip_member", err_msg, 1, 8)) {
2407 ACE_TEXT(
" member with bit bound %d\n"),
2408 member_kind ==
TK_ENUM ?
"n enum" :
" bitmask", bit_bound));
2438 DDS::TypeDescriptor_var descriptor;
2442 const DDS::DynamicType_var elem_type =
get_base_type(descriptor->element_type());
2447 if (!(
strm_ >> length)) {
2450 ACE_TEXT(
" Failed to deserialize a primitive sequence member\n")));
2455 return skip(
"skip_sequence_member",
"Failed to skip a primitive sequence member",
2456 length, primitive_size);
2464 DDS::TypeDescriptor_var descriptor;
2468 const DDS::DynamicType_var elem_type =
get_base_type(descriptor->element_type());
2472 return skip(
"skip_array_member",
"Failed to skip a primitive array member",
2481 DDS::TypeDescriptor_var descriptor;
2485 const DDS::DynamicType_var elem_type =
get_base_type(descriptor->element_type());
2486 const DDS::DynamicType_var key_type =
get_base_type(descriptor->key_element_type());
2492 if (!(
strm_ >> length)) {
2495 ACE_TEXT(
" Failed to deserialize length of a primitive map member\n")));
2500 for (
unsigned i = 0; i < length; ++i) {
2501 if (!
skip(
"skip_map_member",
"Failed to skip a key of a primitive map member",
2502 1, key_primitive_size)) {
2505 if (!
skip(
"skip_map_member",
"Failed to skip an element of a primitive map member",
2506 1, elem_primitive_size)) {
2518 const TypeKind kind = coll_type->get_kind();
2526 ACE_TEXT(
" Failed to deserialize DHEADER of a non-primitive %C member\n"),
2532 return skip(
"skip_collection_member", err_msg.c_str(), dheader);
2537 }
else if (kind ==
TK_MAP) {
2539 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::skip_collection_member: " 2540 "DynamicData does not currently support XCDR1 maps\n"));
2582 bool must_understand;
2586 const TypeKind disc_tk = disc_type->get_kind();
2633 if (!(
strm_ >> value)) {
return false; }
2640 if (!(
strm_ >> value)) {
return false; }
2645 return strm_ >> label;
2649 if (!(
strm_ >> value)) {
return false; }
2656 if (!(
strm_ >> value)) {
return false; }
2663 if (!(
strm_ >> value)) {
return false; }
2669 DDS::TypeDescriptor_var disc_td;
2674 if (bit_bound >= 1 && bit_bound <= 8) {
2678 }
else if (bit_bound >= 9 && bit_bound <= 16) {
2680 if (!(
strm_ >> value)) {
return false; }
2683 return strm_ >> label;
2698 DDS::TypeDescriptor_var descriptor;
2714 ACE_TEXT(
" DHEADER of the DynamicData object\n")));
2718 return skip(
"skip_all",
"Failed to skip the whole DynamicData object\n", dheader);
2732 const DDS::DynamicType_var disc_type =
get_base_type(descriptor->discriminator_type());
2738 DDS::DynamicTypeMembersById_var members;
2743 if (!members_impl) {
2747 bool has_default =
false;
2748 DDS::MemberDescriptor_var default_member;
2750 DDS::MemberDescriptor_var md;
2756 if (label == labels[i]) {
2757 const DDS::DynamicType_ptr selected_member = md->type();
2758 bool good = selected_member &&
skip_member(selected_member);
2763 if (md->is_default_label()) {
2765 default_member = md;
2770 const DDS::DynamicType_ptr default_dt = default_member->type();
2771 bool good = default_dt &&
skip_member(default_dt);
2776 ACE_TEXT(
" selected member and a discriminator with value %d\n"), label));
2798 switch (dt->get_kind()) {
2832 DDS::TypeDescriptor_var descriptor;
2837 if (dtns.find(descriptor->name()) != dtns.end()) {
2840 if (descriptor->extensibility_kind() ==
DDS::MUTABLE &&
2843 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::check_xcdr1_mutable: " 2844 "XCDR1 mutable is not currently supported in OpenDDS\n"));
2848 dtns.insert(descriptor->name());
2850 DDS::DynamicTypeMember_var dtm;
2853 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: DynamicDataXcdrReadImpl::check_xcdr1_mutable: " 2854 "Failed to get member from DynamicType\n"));
2858 DDS::MemberDescriptor_var descriptor;
2869 #ifndef OPENDDS_NO_CONTENT_SUBSCRIPTION_PROFILE 2871 template <
typename T>
2908 DDS::DynamicTypeMember_var dtm;
2912 DDS::MemberDescriptor_var md;
2916 DDS::DynamicType_var member_type =
get_base_type(md->type());
2917 const TypeKind member_kind = member_type->get_kind();
2918 switch (member_kind) {
2960 #ifndef OPENDDS_SAFETY_PROFILE 2968 const DDS::DynamicType_var
type = dd->type();
2970 const char*
const kind = base_type->get_kind() ==
TK_STRUCTURE ?
"struct" :
"union";
2975 type_string +=
"\n";
2980 const MemberId member_id = dd->get_member_id_at_index(idx);
2984 "failed to get %C member at index %u\n", kind, idx));
2989 if (!
print_member(dd, type_string, indent, member_id)) {
2992 "failed to print %C member with id %u\n", kind, member_id));
2998 indent = temp_indent;
3005 DDS::DynamicType_ptr member_type;
3006 DDS::MemberDescriptor_var member_descriptor;
3007 const DDS::DynamicType_var container_type = dd->type();
3008 const DDS::TypeKind container_kind = container_type->get_kind();
3010 if (sequence_like) {
3011 DDS::TypeDescriptor_var td;
3015 member_type = td->element_type();
3018 DDS::DynamicTypeMember_var dtm;
3025 member_type = member_descriptor->type();
3028 const DDS::DynamicType_var member_base_type =
get_base_type(member_type);
3030 DDS::TypeDescriptor_var member_type_descriptor;
3031 if (member_base_type->get_descriptor(member_type_descriptor) !=
DDS::RETCODE_OK) {
3035 if (member_descriptor) {
3036 type_string += indent;
3038 if (struct_or_union) {
3039 type_string += (tk ==
TK_STRUCTURE ?
"struct " :
"union ");
3042 const DCPS::String member_name = member_descriptor->name();
3043 type_string +=
DCPS::String(member_type_name.
in()) +
" " + member_name;
3044 if (!struct_or_union) {
3048 DDS::TypeDescriptor_var td;
3049 const DDS::DynamicType_var elem_type =
get_base_type(member_type_descriptor->element_type());
3054 type_string += ele_type_name;
3059 type_string +=
"= ";
3068 DDS::String8_var
name;
3070 type_string += name.in();
3074 type_string +=
"\n";
3103 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: print_member: failed to get_boolean_value\n"));
3108 type_string += bool_string +
"\n";
3119 std::stringstream os;
3120 os << std::hex << std::setfill(
'0') << std::setw(2) << int(my_byte);
3121 type_string +=
"0x" + os.str() +
"\n";
3132 std::stringstream os;
3133 DCPS::char_helper<ACE_CDR::Char>(os, my_char);
3134 type_string +=
"'" + os.str() +
"'\n";
3137 #ifdef DDS_HAS_WCHAR 3142 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: print_member: failed to get_char16_value\n"));
3146 std::stringstream os;
3147 DCPS::char_helper<ACE_CDR::WChar>(os, my_wchar);
3148 type_string +=
"L'" + os.str() +
"'\n";
3156 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: print_member: failed to get_float32_value\n"));
3160 std::stringstream os;
3162 type_string += os.str() +
"\n";
3169 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: print_member: failed to get_float64_value\n"));
3173 std::stringstream os;
3175 type_string += os.str() +
"\n";
3180 if (dd->get_float128_value(my_longdouble, member_id) !=
DDS::RETCODE_OK) {
3182 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: print_member: failed to get_float128_value\n"));
3186 std::stringstream os;
3187 os << my_longdouble;
3188 type_string += os.str() +
"\n";
3195 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: print_member: failed to get_string_value\n"));
3199 std::stringstream os;
3204 #ifdef DDS_HAS_WCHAR 3207 if (dd->get_wstring_value(my_wstring, member_id) !=
DDS::RETCODE_OK) {
3209 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: print_member: failed to get_wstring_value\n"));
3213 std::stringstream os;
3215 type_string +=
"L\"" + os.str() +
"\"\n";
3221 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: print_member: Bitmask is an unsupported type in OpenDDS\n"));
3226 ACE_ERROR((
LM_NOTICE,
"(%P|%t) NOTICE: print_member: Bitset is an unsupported type in OpenDDS\n"));
3233 DDS::DynamicData_var temp_dd;
3241 if (!
print_member(temp_dd, type_string, indent, temp_dd->get_member_id_at_index(i))) {
3244 "failed to read array/sequence member\n"));
3249 indent = temp_indent;
3254 DDS::DynamicData_var temp_dd;
3258 if (!
print_members(temp_dd, type_string, indent, sequence_like)) {
3270 const DDS::DynamicType_var
type = dd->type();
3274 switch (base_type->get_kind()) {
3291 #endif // OPENDDS_SAFETY_PROFILE DDS::ReturnCode_t get_int32_values(DDS::Int32Seq &value, DDS::MemberId id)
bool read_delimiter(size_t &size)
const TypeKind TK_SEQUENCE
bool skip(const char *func_name, const char *description, size_t n, int size=1)
bool check_xcdr1_mutable(DDS::DynamicType_ptr dt)
DDS::ReturnCode_t get_uint64_values(DDS::UInt64Seq &value, DDS::MemberId id)
size_t rpos() const
Examine the logical reading position of the stream.
sequence< unsigned short > UInt16Seq
bool skip_collection_member(DDS::DynamicType_ptr coll_type)
bool get_value_from_collection(ElementType &value, MemberId id, TypeKind collection_tk, TypeKind enum_or_bitmask=TK_NONE, LBound lower=0, LBound upper=0)
bool is_complex(TypeKind tk)
sequence< long > Int32Seq
sequence< wchar > WcharSeq
DDS::ReturnCode_t clear_all_values()
bool struct_has_explicit_keys(AST_Structure *node)
const LogLevel::Value value
DDS::ReturnCode_t get_int64_values(DDS::Int64Seq &value, DDS::MemberId id)
DDS::ReturnCode_t get_float64_values(DDS::Float64Seq &value, DDS::MemberId id)
const TypeKind TK_STRING16
const TypeKind TK_FLOAT128
DDS::ReturnCode_t get_float32_value(CORBA::Float &value, DDS::MemberId id)
Object(TAO_Stub *p, CORBA::Boolean collocated=false, TAO_Abstract_ServantBase *servant=0, TAO_ORB_Core *orb_core=0)
void wstring_free(WChar *const)
bool get_values_from_union(SequenceType &value, MemberId id, TypeKind enum_or_bitmask, LBound lower, LBound upper)
bool skip(size_t n, int size=1)
bool skip_to_map_element(MemberId id)
sequence< long long > Int64Seq
String to_dds_string(unsigned short to_convert)
bool is_type_supported(TypeKind tk, const char *func_name)
Verify that a given type is primitive or string or wstring.
bool skip_to_sequence_element(MemberId id, DDS::DynamicType_ptr coll_type=0)
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.
DDS::ReturnCode_t get_int8_values(DDS::Int8Seq &value, DDS::MemberId id)
bool print_member(DDS::DynamicData_ptr dd, DCPS::String &type_string, DCPS::String &indent, MemberId member_id)
DDS::TypeDescriptor_var type_desc_
bool read_parameter_id(unsigned &id, size_t &size, bool &must_understand)
DDS::ReturnCode_t get_char16_values(DDS::WcharSeq &value, DDS::MemberId id)
DDS::ReturnCode_t get_single_value(ValueType &value, MemberId id, TypeKind enum_or_bitmask=TK_NONE, LBound lower=0, LBound upper=0)
DDS::ReturnCode_t get_value_from_struct(MemberType &value, MemberId id, TypeKind enum_or_bitmask=TK_NONE, LBound lower=0, LBound upper=0)
bool get_values_from_array(SequenceType &value, MemberId id, TypeKind enum_or_bitmask, LBound lower, LBound upper)
bool is_primitive(TypeKind tk)
DDS::ReturnCode_t clear_nonkey_values()
DCPS::Serializer::RdState align_state_
size_t strlen(const char *s)
DDS::ReturnCode_t get_complex_value(DDS::DynamicData_ptr &value, DDS::MemberId id)
DCPS::Sample::Extent extent_
public unsigned long index
bool skip_map_member(DDS::DynamicType_ptr type)
sequence< short > Int16Seq
bool skip_to_array_element(MemberId id, DDS::DynamicType_ptr coll_type=0)
DDS::ReturnCode_t get_uint64_value_impl(CORBA::ULongLong &value, DDS::MemberId id)
DDS::MemberDescriptor * get_from_union_common_checks(MemberId id, const char *func_name)
DDS::ReturnCode_t get_int16_value(CORBA::Short &value, DDS::MemberId id)
DDS::ReturnCode_t get_string_value(char *&value, DDS::MemberId id)
ACE_Message_Block * chain_
bool is_sequence_like(TypeKind tk)
DDS::MemberId get_member_id_at_index(ACE_CDR::ULong index)
void setup_stream(ACE_Message_Block *chain)
DDS::ReturnCode_t get_byte_values(DDS::ByteSeq &value, DDS::MemberId id)
bool has_optional_member(bool &has_optional) const
DDS::ReturnCode_t get_sequence_values(SequenceType &value, MemberId id, TypeKind enum_or_bitmask=TK_NONE, LBound lower=0, LBound upper=0)
Common method to read a value sequence of any type (primitive, string, wstring).
bool get_primitive_size(DDS::DynamicType_ptr dt, ACE_CDR::ULong &size) const
sequence< unsigned long long > UInt64Seq
DDS::ReturnCode_t get_descriptor(DDS::MemberDescriptor *&value, MemberId id)
~DynamicDataXcdrReadImpl()
sequence< boolean > BooleanSeq
Class to serialize and deserialize data for DDS.
bool read_discriminator(const DDS::DynamicType_ptr disc_type, DDS::ExtensibilityKind union_ek, ACE_CDR::Long &label)
bool skip_sequence_member(DDS::DynamicType_ptr type)
const TypeKind TK_BOOLEAN
const char * typekind_to_string(TypeKind tk)
DDS::ReturnCode_t get_enum_value(DDS::Int32 &value, DDS::DynamicType_ptr enum_type, DDS::DynamicData_ptr src, DDS::MemberId id)
static bool has_explicit_keys(DDS::DynamicType *dt)
DDS::ReturnCode_t get_uint32_value(CORBA::ULong &value, DDS::MemberId id)
sequence< uint8 > UInt8Seq
bool print_members(DDS::DynamicData_ptr dd, DCPS::String &type_string, DCPS::String &indent, bool print_name)
sequence< octet > ByteSeq
const TypeKind TK_BITMASK
DDS::ReturnCode_t get_char16_value(CORBA::WChar &value, DDS::MemberId id)
DDS::ReturnCode_t get_boolean_values(DDS::BooleanSeq &value, DDS::MemberId id)
ACE_Message_Block * current() const
bool get_values_from_map(SequenceType &value, MemberId id, TypeKind enum_or_bitmask, LBound lower, LBound upper)
DDS::ReturnCode_t get_char8_value(CORBA::Char &value, DDS::MemberId id)
virtual ACE_Message_Block * release(void)
ACE_CDR::ULong get_item_count()
sequence< unsigned long > UInt32Seq
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const
virtual ACE_Message_Block * duplicate(void) const
sequence< long double > Float128Seq
DDS::DynamicType_ptr type()
const_iterator begin() const
DDS::ReturnCode_t get_float128_values(DDS::Float128Seq &value, DDS::MemberId id)
DDS::UInt32 bound_total(DDS::TypeDescriptor_var descriptor)
static bool exclude_member(DCPS::Sample::Extent ext, bool is_key, bool has_explicit_keys)
bool get_values_from_sequence(SequenceType &value, MemberId id, TypeKind enum_or_bitmask, LBound lower, LBound upper)
const ACE_CDR::ULong MEMBER_ID_INVALID
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
IntermediateChains chains_to_release
sequence< float > Float32Seq
bool get_boolean_from_bitmask(ACE_CDR::ULong index, ACE_CDR::Boolean &value)
character_type *& inout(void)
DDS::ReturnCode_t get_int64_value_impl(CORBA::LongLong &value, DDS::MemberId id)
DDS::ReturnCode_t set_descriptor(MemberId id, DDS::MemberDescriptor *value)
const TypeKind TK_STRUCTURE
DDS::ReturnCode_t get_uint16_value(CORBA::UShort &value, DDS::MemberId id)
DDS::DynamicData_ptr clone()
DDS::ReturnCode_t get_wstring_value(CORBA::WChar *&value, DDS::MemberId id)
const IntermediateChains & get_intermediate_chains() const
const TypeKind TK_FLOAT32
bool exclude_struct_member(MemberId id, DDS::MemberDescriptor_var &md) const
Check if a member with a given id is excluded from struct sample.
bool skip_array_member(DDS::DynamicType_ptr type)
const TypeKind TK_STRING8
bool get_from_struct_common_checks(const DDS::MemberDescriptor_var &md, MemberId id, TypeKind kind, bool is_sequence=false)
DDS::ReturnCode_t get_values_from_struct(SequenceType &value, MemberId id, TypeKind enum_or_bitmask, LBound lower, LBound upper)
XcdrVersion xcdr_version() const
DDS::ReturnCode_t get_char8_values(DDS::CharSeq &value, DDS::MemberId id)
const ReturnCode_t RETCODE_NO_DATA
CORBA::Boolean equals(DDS::DynamicData_ptr other)
DDS::ReturnCode_t get_value_from_union(MemberType &value, MemberId id, TypeKind enum_or_bitmask=TK_NONE, LBound lower=0, LBound upper=0)
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
OpenDDS_Dcps_Export LogLevel log_level
DDS::ReturnCode_t get_int8_value(CORBA::Int8 &value, DDS::MemberId id)
sequence< wstring > WstringSeq
DDS::ReturnCode_t clear_value(DDS::MemberId id)
DDS::DynamicData_ptr loan_value(DDS::MemberId id)
bool check_xcdr1_mutable_i(DDS::DynamicType_ptr dt, DynamicTypeNameSet &dtns)
const Encoding & encoding() const
const ReturnCode_t RETCODE_ERROR
std::ostream & string_helper(std::ostream &o, const CharType *value)
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
DDS::ReturnCode_t get_enumerator_name(DDS::String8_var &name, DDS::Int32 value, DDS::DynamicType_ptr type)
bool read_value(ValueType &value, TypeKind tk)
DDS::MemberDescriptor * get_union_selected_member()
Return the member descriptor for the selected member from a union data or null.
static DCPS::Sample::Extent nested(DCPS::Sample::Extent ext)
static const ACE_CDR::ULong ITEM_COUNT_INVALID
const ReturnCode_t RETCODE_OK
DDS::ReturnCode_t get_int16_values(DDS::Int16Seq &value, DDS::MemberId id)
DDS::ReturnCode_t get_int_value(DDS::Int64 &value, DDS::DynamicData_ptr src, DDS::MemberId id, DDS::TypeKind kind)
const ReturnCode_t RETCODE_UNSUPPORTED
bool exclude_union_member(MemberId id) const
Check if a member with a given Id is excluded from a union sample.
DDS::ReturnCode_t get_boolean_value(CORBA::Boolean &value, DDS::MemberId id)
bool read_values(SequenceType &value, TypeKind elem_tk)
DDS::ReturnCode_t get_simple_value(DCPS::Value &value, DDS::MemberId id)
DDS::ReturnCode_t get_uint16_values(DDS::UInt16Seq &value, DDS::MemberId id)
DDS::ReturnCode_t get_uint8_value(CORBA::UInt8 &value, DDS::MemberId id)
DDS::ReturnCode_t get_string_values(DDS::StringSeq &value, DDS::MemberId id)
DDS::ReturnCode_t get_uint32_values(DDS::UInt32Seq &value, DDS::MemberId id)
DDS::ReturnCode_t get_uint_value(DDS::UInt64 &value, DDS::DynamicData_ptr src, DDS::MemberId id, DDS::TypeKind kind)
DDS::ReturnCode_t get_byte_value(CORBA::Octet &value, DDS::MemberId id)
const character_type * in(void) const
DDS::ReturnCode_t get_char_common(CharT &value, MemberId id)
Common method to read a single char8 or char16 value.
bool skip_struct_member_at_index(ACE_CDR::ULong index, ACE_CDR::ULong &num_skipped)
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
DDS::ReturnCode_t get_float128_value(CORBA::LongDouble &value, DDS::MemberId id)
DDS::ReturnCode_t get_uint8_values(DDS::UInt8Seq &value, DDS::MemberId id)
sequence< double > Float64Seq
DDS::ReturnCode_t get_wstring_values(DDS::WstringSeq &value, DDS::MemberId id)
The Internal API and Implementation of OpenDDS.
ACE_CDR::ULong item_count_
Cache the number of items (i.e., members or elements) in the data it holds.
DynamicDataXcdrReadImpl()
bool enum_string_helper(char *&strInOut, MemberId id)
DDS::ReturnCode_t get_float32_values(DDS::Float32Seq &value, DDS::MemberId id)
DDS::ReturnCode_t skip_to_struct_member(DDS::MemberDescriptor *member_desc, MemberId id)
DynamicDataXcdrReadImpl & operator=(const DynamicDataXcdrReadImpl &other)
ACE_CDR::ULong length() const
bool skip_aggregated_member(DDS::DynamicType_ptr type)
Skip a member which is a structure or a union.
const_iterator end() const
DDS::ReturnCode_t get_int32_value(CORBA::Long &value, DDS::MemberId id)
const TypeKind TK_FLOAT64
void copy(const DynamicDataXcdrReadImpl &other)
sequence< string > StringSeq
extensibility(MUTABLE) struct TypeLookup_getTypes_In
DDS::ReturnCode_t get_float64_value(CORBA::Double &value, DDS::MemberId id)
DDS::ReturnCode_t return_loaned_value(DDS::DynamicData_ptr value)
bool skip_member(DDS::DynamicType_ptr member_type)
bool print_dynamic_data(DDS::DynamicData_ptr dd, DCPS::String &type_string, DCPS::String &indent)
const Encoding & encoding_
MapType::const_iterator const_iterator