+gras_datadesc_matrix(gras_datadesc_type_t elm_t, void_f_pvoid_t const free_f)
+{
+ char *buffname;
+ gras_datadesc_type_t res;
+
+ asprintf(&buffname, "s_xbt_matrix_t(%s)", elm_t->name);
+ res = gras_datadesc_struct(buffname);
+
+ gras_datadesc_struct_append(res, "lines",
+ gras_datadesc_by_name("unsigned int"));
+ gras_datadesc_struct_append(res, "rows",
+ gras_datadesc_by_name("unsigned int"));
+
+ gras_datadesc_struct_append(res, "elmsize",
+ gras_datadesc_by_name("unsigned long int"));
+
+ gras_datadesc_struct_append(res, "data", gras_datadesc_ref_pop_arr(elm_t));
+ gras_datadesc_struct_append(res, "free_f",
+ gras_datadesc_by_name("function pointer"));
+ gras_datadesc_struct_close(res);
+
+ gras_datadesc_cb_field_push(res, "lines");
+ gras_datadesc_cb_field_push_multiplier(res, "rows");
+
+ gras_datadesc_cb_recv(res, &gras_datadesc_matrix_cb);
+ memcpy(res->extra, &free_f, sizeof(free_f));
+
+ /* build a ref to it */
+ free(buffname);
+ asprintf(&buffname, "xbt_matrix_t(%s)", elm_t->name);
+ res = gras_datadesc_ref(buffname, res);
+ free(buffname);
+ return res;
+}
+
+gras_datadesc_type_t
+gras_datadesc_import_nws(const char *name,
+ const DataDescriptor * desc, unsigned long howmany)
+{