+
+/**
+ * gras_ddt_get_by_name:
+ *
+ * Retrieve a type from its name
+ */
+gras_error_t gras_ddt_get_by_name(gras_set_t *set,
+ const char *name,
+ gras_datadesc_type_t **type) {
+ return gras_set_get_by_name(set,name,(gras_set_elm_t**)type);
+}
+
+/**
+ * gras_dd_typeset_create:
+ *
+ * create a type set, and bootstrap it by declaring all basic types in it
+ */
+gras_error_t
+gras_dd_typeset_create(int gras_arch,
+ gras_set_t **s) {
+ gras_error_t errcode;
+ gras_datadesc_type_t *ddt; /* What to add */
+ gras_datadesc_type_t *elm; /* element of ddt when needed */
+ gras_set_t *set; /* result */
+
+ if (gras_arch >= gras_arch_sizes_count) {
+ RAISE1(mismatch_error, "Remote architecture signature (=%d) unknown locally\n", gras_arch);
+ }
+
+ TRY(gras_set_new(s));
+ set=*s;
+
+ TRY(gras_ddt_new_scalar("signed char",
+ gras_arch_sizes[gras_arch].sizeof_char,
+ e_gras_dd_scalar_encoding_sint,
+ NULL,
+ &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+ TRY(gras_ddt_new_scalar("unsigned char",
+ gras_arch_sizes[gras_arch].sizeof_char,
+ e_gras_dd_scalar_encoding_uint,
+ NULL,
+ &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+
+ TRY(gras_ddt_new_scalar("signed short int",
+ gras_arch_sizes[gras_arch].sizeof_short,
+ e_gras_dd_scalar_encoding_sint,
+ NULL,
+ &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+ TRY(gras_ddt_new_scalar("unsigned short int",
+ gras_arch_sizes[gras_arch].sizeof_short,
+ e_gras_dd_scalar_encoding_uint,
+ NULL,
+ &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+
+ TRY(gras_ddt_new_scalar("signed int",
+ gras_arch_sizes[gras_arch].sizeof_int,
+ e_gras_dd_scalar_encoding_sint,
+ NULL,
+ &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+ TRY(gras_ddt_new_scalar("unsigned int",
+ gras_arch_sizes[gras_arch].sizeof_int,
+ e_gras_dd_scalar_encoding_uint,
+ NULL,
+ &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+
+ TRY(gras_ddt_new_scalar("signed long int",
+ gras_arch_sizes[gras_arch].sizeof_long,
+ e_gras_dd_scalar_encoding_sint,
+ NULL,
+ &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+ TRY(gras_ddt_new_scalar("unsigned long int",
+ gras_arch_sizes[gras_arch].sizeof_long,
+ e_gras_dd_scalar_encoding_uint,
+ NULL,
+ &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+
+ TRY(gras_ddt_new_scalar("signed long long int",
+ gras_arch_sizes[gras_arch].sizeof_long_long,
+ e_gras_dd_scalar_encoding_sint,
+ NULL,
+ &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+ TRY(gras_ddt_new_scalar("unsigned long long int",
+ gras_arch_sizes[gras_arch].sizeof_long_long,
+ e_gras_dd_scalar_encoding_uint,
+ NULL,
+ &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+
+ TRY(gras_ddt_new_scalar("data pointer",
+ gras_arch_sizes[gras_arch].sizeof_pdata,
+ e_gras_dd_scalar_encoding_uint,
+ NULL,
+ &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+ TRY(gras_ddt_new_scalar("function pointer",
+ gras_arch_sizes[gras_arch].sizeof_pfunc,
+ e_gras_dd_scalar_encoding_uint,
+ NULL,
+ &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+
+ TRY(gras_ddt_new_scalar("float",
+ gras_arch_sizes[gras_arch].sizeof_float,
+ e_gras_dd_scalar_encoding_float,
+ NULL,
+ &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+ TRY(gras_ddt_new_scalar("double",
+ gras_arch_sizes[gras_arch].sizeof_float,
+ e_gras_dd_scalar_encoding_float,
+ NULL,
+ &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+ TRY(gras_ddt_get_by_name(set,"unsigned char",&elm));
+ TRY(gras_ddt_new_array("string", elm, 0, _strlen_cb, NULL, &ddt));
+ TRY(gras_ddt_register(set,ddt));
+
+
+ return no_error;
+}
+