// IDL which is converted to XML module M_Testing { typedef sequence T_Chars; struct Test_Sub { long long elem_one; long elem_two; }; struct Test_A { long elem_a; //@key sequence list_b; //@key long elem_c; //@key Test_Sub elem_sub; long elem_d; //@key long elem_e; T_Chars list_f; long elem_g; }; }; // C++ code to copy the struct DDS_StringSeq paths; DDS_ExceptionCode_t ex; DDS_TypeCode* tc = DDS_TypeCodeFactory::get_instance()->create_tc_from_xml_file( "TestT.xml", "M_Testing::Test_A", paths, 1000, 1000, ex ); // Create source data with some values DDS_DynamicData srcData( tc, DDS_DYNAMIC_DATA_PROPERTY_DEFAULT ); srcData.set_long( "elem_a", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 1 ); srcData.set_long( "list_b[0]", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 10 ); srcData.set_long( "elem_c", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 2 ); srcData.set_longlong( "elem_sub.elem_one", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 101 ); srcData.set_long( "elem_sub.elem_two", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 202 ); srcData.set_long( "elem_d", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 3 ); srcData.set_long( "elem_e", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 4 ); srcData.set_char( "list_f[0]", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 'A' ); srcData.set_char( "list_f[1]", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 'B' ); srcData.set_char( "list_f[2]", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 'C' ); srcData.set_char( "list_f[3]", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 'D' ); srcData.set_long( "elem_g", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 5 ); std::cout << std::endl << "SOURCE:" << std::endl; srcData.print( stdout, 1 ); // Create destination data with other values DDS_DynamicData destData( tc, DDS_DYNAMIC_DATA_PROPERTY_DEFAULT ); destData.set_long( "elem_a", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 21 ); destData.set_long( "list_b[0]", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 210 ); destData.set_long( "elem_c", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 22 ); destData.set_long( "elem_d", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 23 ); destData.set_long( "elem_e", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 24 ); destData.set_char( "list_f[0]", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 'E' ); destData.set_char( "list_f[1]", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 'F' ); destData.set_char( "list_f[2]", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 'G' ); destData.set_char( "list_f[3]", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 'H' ); destData.set_long( "elem_g", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 25 ); destData.set_longlong( "elem_sub.elem_one", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 2101 ); destData.set_long( "elem_sub.elem_two", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, 2202 ); std::cout << std::endl << "DESTINATION BEFORE set_complex_member:" << std::endl; destData.print( stdout, 1 ); // Copy complex data DDS_DynamicData complexData( NULL, DDS_DYNAMIC_DATA_PROPERTY_DEFAULT ); DDS_ReturnCode_t res = srcData.get_complex_member( complexData, "elem_sub", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED ); if ( res != DDS_RETCODE_OK ) { std::cout << "get_complex_member(elem_sub) failed, res=" << res << std::endl; return 0; } std::cout << std::endl << "SOURCE COMPLEX DATA retrieved with get_complex_member:" << std::endl; complexData.print( stdout, 1 ); res = destData.set_complex_member( "elem_sub", DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED, complexData ); if ( res != DDS_RETCODE_OK ) { std::cout << "set_complex_member(elem_sub) failed, res=" << res << std::endl; return 0; } std::cout << std::endl << "DESTINATION AFTER set_complex_member:" << std::endl; destData.print( stdout, 1 ); // Here parts of list_f and elem_g are not longer being displayed!