| 2956 | } |
| 2957 | |
| 2958 | bool print_member(DDS::DynamicData_ptr dd, DCPS::String& type_string, DCPS::String& indent, |
| 2959 | MemberId member_id) |
| 2960 | { |
| 2961 | DDS::DynamicType_ptr member_type; |
| 2962 | DDS::MemberDescriptor_var member_descriptor; |
| 2963 | const DDS::DynamicType_var container_type = dd->type(); |
| 2964 | const DDS::TypeKind container_kind = container_type->get_kind(); |
| 2965 | const bool sequence_like = is_sequence_like(container_kind); |
| 2966 | if (sequence_like) { |
| 2967 | DDS::TypeDescriptor_var td; |
| 2968 | if (container_type->get_descriptor(td) != DDS::RETCODE_OK) { |
| 2969 | return false; |
| 2970 | } |
| 2971 | member_type = td->element_type(); |
| 2972 | |
| 2973 | } else { |
| 2974 | DDS::DynamicTypeMember_var dtm; |
| 2975 | if (container_type->get_member(dtm, member_id) != DDS::RETCODE_OK) { |
| 2976 | return false; |
| 2977 | } |
| 2978 | if (dtm->get_descriptor(member_descriptor) != DDS::RETCODE_OK) { |
| 2979 | return false; |
| 2980 | } |
| 2981 | member_type = member_descriptor->type(); |
| 2982 | } |
| 2983 | |
| 2984 | const DDS::DynamicType_var member_base_type = get_base_type(member_type); |
| 2985 | const DDS::TypeKind tk = member_base_type->get_kind(); |
| 2986 | DDS::TypeDescriptor_var member_type_descriptor; |
| 2987 | if (member_base_type->get_descriptor(member_type_descriptor) != DDS::RETCODE_OK) { |
| 2988 | return false; |
| 2989 | } |
| 2990 | |
| 2991 | if (member_descriptor) { |
| 2992 | type_string += indent; |
| 2993 | const bool struct_or_union = tk == TK_STRUCTURE || tk == TK_UNION; |
| 2994 | if (struct_or_union) { |
| 2995 | type_string += (tk == TK_STRUCTURE ? "struct " : "union "); |
| 2996 | } |
| 2997 | const CORBA::String_var member_type_name = member_type->get_name(); |
| 2998 | const DCPS::String member_name = member_descriptor->name(); |
| 2999 | type_string += DCPS::String(member_type_name.in()) + " " + member_name; |
| 3000 | if (!struct_or_union) { |
| 3001 | type_string += " "; |
| 3002 | } |
| 3003 | if (tk == TK_ARRAY || tk == TK_SEQUENCE) { |
| 3004 | DDS::TypeDescriptor_var td; |
| 3005 | const DDS::DynamicType_var elem_type = get_base_type(member_type_descriptor->element_type()); |
| 3006 | if (elem_type->get_descriptor(td) != DDS::RETCODE_OK) { |
| 3007 | return false; |
| 3008 | } |
| 3009 | DCPS::String ele_type_name = td->name(); |
| 3010 | type_string += ele_type_name; |
| 3011 | } |
| 3012 | } |
| 3013 | |
| 3014 | if (!is_complex(tk)) { |
| 3015 | type_string += "= "; |
no test coverage detected