void test_dyn_map1 (void) { DDS_DynamicTypeSupport ts; DDS_DynamicTypeBuilder sb1, mb, sb; DDS_DynamicType s1, s, m; DDS_TypeDescriptor *desc; DDS_MemberDescriptor *md; DDS_DynamicData dd, dd2, ddm; DDS_ReturnCode_t rc; v_printf ("test_dyn_map1 - "); /* 1. Create the type. */ desc = DDS_TypeDescriptor__alloc (); fail_unless (desc != NULL); md = DDS_MemberDescriptor__alloc (); fail_unless (md != NULL); sb = DDS_DynamicTypeBuilderFactory_create_string_type (50); fail_unless (sb != NULL); s = DDS_DynamicTypeBuilder_build (sb); fail_unless (s != NULL); DDS_DynamicTypeBuilderFactory_delete_type (sb); mb = DDS_DynamicTypeBuilderFactory_create_map_type ( DDS_DynamicTypeBuilderFactory_get_primitive_type (DDS_INT_32_TYPE), s, DDS_UNBOUNDED_COLLECTION); fail_unless (mb != NULL); m = DDS_DynamicTypeBuilder_build (mb); fail_unless (m != NULL); DDS_DynamicTypeBuilderFactory_delete_type (mb); desc->kind = DDS_STRUCTURE_TYPE; desc->name = "dmap1"; sb1 = DDS_DynamicTypeBuilderFactory_create_type (desc); fail_unless (sb1 != NULL); md->name = "m"; md->id = 0; md->type = m; md->index = 0; fail_unless (md->type != NULL); rc = DDS_DynamicTypeBuilder_add_member (sb1, md); fail_unless (rc == DDS_RETCODE_OK); md->name = "b"; md->id = 1; md->type = DDS_DynamicTypeBuilderFactory_get_primitive_type (DDS_INT_64_TYPE); md->index = 1; fail_unless (md->type != NULL); rc = DDS_DynamicTypeBuilder_add_member (sb1, md); fail_unless (rc == DDS_RETCODE_OK); s1 = DDS_DynamicTypeBuilder_build (sb1); fail_unless (s1 != NULL); DDS_DynamicTypeBuilderFactory_delete_type (sb1); ts = DDS_DynamicTypeSupport_create_type_support (s1); fail_unless (ts != NULL); DDS_TypeDescriptor__free (desc); DDS_MemberDescriptor__free (md); DDS_TypeSupport_dump_type (0, (DDS_TypeSupport) ts, 15); /* 2. Create a Dynamic data item for this type. */ ddm = DDS_DynamicDataFactory_create_data (m); md->name = "key"; md->id = DDS_DynamicData_get_member_id_by_name (ddm, "alfa"); md->type = DDS_DynamicTypeBuilderFactory_get_primitive_type (DDS_INT_32_TYPE); md->default_value = "0"; md->index = 0; md->default_label = 0; dd = DDS_DynamicDataFactory_create_data (s1); fail_unless (dd != NULL); rc = DDS_DynamicData_set_int32_value (dd, 0, 0xCAFEBABE); fail_unless (rc == DDS_RETCODE_OK); rc = DDS_DynamicData_set_int64_value (dd, 1, -1); fail_unless (rc == DDS_RETCODE_OK); marshallDynamic (dd, &dd2, ts); DDS_DynamicDataFactory_delete_data (dd); DDS_DynamicTypeBuilderFactory_delete_type (s1); DDS_DynamicTypeSupport_delete_type_support (ts); v_printf ("success!\r\n"); }
void test_dyn_mutable2 (void) { DDS_DynamicTypeSupport ts; DDS_DynamicTypeBuilder sb2, stb, sstb; DDS_DynamicType s2, st, sst; DDS_TypeDescriptor *desc; DDS_MemberDescriptor *md; DDS_DynamicData dd, dd2, dds; DDS_ReturnCode_t rc; DDS_StringSeq ss; unsigned n; char *strings [] = { "Hi there", "blabla", "\0", NULL, "got here", "not yet done", "", "num8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "done :)" }; v_printf ("test_mutable2 - "); /* 1. Create the type. */ desc = DDS_TypeDescriptor__alloc (); fail_unless (desc != NULL); desc->kind = DDS_STRUCTURE_TYPE; desc->name = "dstruct2m"; sb2 = DDS_DynamicTypeBuilderFactory_create_type (desc); fail_unless (sb2 != NULL); md = DDS_MemberDescriptor__alloc (); fail_unless (md != NULL); ADD_FIELD (sb2, md, "u16", 0, 5, DDS_UINT_16_TYPE); set_key_annotation (sb2, "u16"); stb = DDS_DynamicTypeBuilderFactory_create_string_type (DDS_UNBOUNDED_COLLECTION); fail_unless (stb != NULL); st = DDS_DynamicTypeBuilder_build (stb); fail_unless (st != NULL); DDS_DynamicTypeBuilderFactory_delete_type (stb); sstb = DDS_DynamicTypeBuilderFactory_create_sequence_type (st, DDS_UNBOUNDED_COLLECTION); fail_unless (sstb != NULL); sst = DDS_DynamicTypeBuilder_build (sstb); fail_unless (sst != NULL); DDS_DynamicTypeBuilderFactory_delete_type (sstb); md->name = "s"; md->index = 1; md->id = 6; md->type = sst; rc = DDS_DynamicTypeBuilder_add_member (sb2, md); fail_unless (rc == DDS_RETCODE_OK); set_ext_annotation (sb2, "MUTABLE_EXTENSIBILITY"); s2 = DDS_DynamicTypeBuilder_build (sb2); fail_unless (s2 != NULL); DDS_DynamicTypeBuilderFactory_delete_type (sb2); ts = DDS_DynamicTypeSupport_create_type_support (s2); fail_unless (ts != NULL); DDS_TypeDescriptor__free (desc); DDS_MemberDescriptor__free (md); /* 2. Create a Dynamic data item for this type. */ DDS_SEQ_INIT (ss); dds_seq_from_array (&ss, strings, sizeof (strings) / sizeof (char *)); for (n = 0; n <= DDS_SEQ_MAXIMUM (ss); n++) { dd = DDS_DynamicDataFactory_create_data (s2); fail_unless (dd != NULL); SET_FIELD (dd, 5, uint16, n); dds = DDS_DynamicDataFactory_create_data (sst); fail_unless (dds != NULL); DDS_SEQ_LENGTH (ss) = n; rc = DDS_DynamicData_set_string_values (dds, 0, &ss); fail_unless (rc == DDS_RETCODE_OK); SET_FIELD (dd, 6, complex, dds); marshallDynamic (dd, &dd2, ts); DDS_DynamicDataFactory_delete_data (dd); DDS_DynamicDataFactory_delete_data (dds); if (n > 2) { n += 3; if (n == 18) n++; } } dds_seq_cleanup (&ss); DDS_DynamicTypeBuilderFactory_delete_type (s2); DDS_DynamicTypeBuilderFactory_delete_type (sst); DDS_DynamicTypeBuilderFactory_delete_type (st); DDS_DynamicTypeSupport_delete_type_support (ts); set_key_annotation (NULL, NULL); set_ext_annotation (NULL, NULL); v_printf ("success!\r\n"); }