union_type->category.union_data.closed = 1;
}
+/** \brief Copy a type under another name
+ *
+ * This may reveal useful to circumvent parsing macro limitations
+ */
+gras_datadesc_type_t
+ gras_datadesc_copy(const char *name,
+ gras_datadesc_type_t copied) {
+
+ gras_datadesc_type_t res = gras_ddt_new(name);
+ char *name_cpy = res->name;
+
+ memcpy(res,copied,sizeof(s_gras_datadesc_type_t));
+ res->name = name_cpy;
+ return res;
+ }
+
/** \brief Declare a new type being a reference to the one passed in arg */
gras_datadesc_type_t
gras_datadesc_ref(const char *name,
}
static int
-gras_datadesc_copy_rec(gras_cbps_t state,
+gras_datadesc_memcpy_rec(gras_cbps_t state,
xbt_dict_t refs,
gras_datadesc_type_t type,
char *src,
field->send(type,state,field_src);
DEBUG1("Copy field %s",field->name);
- count += gras_datadesc_copy_rec(state,refs,sub_type, field_src, field_dst, 0,
+ count += gras_datadesc_memcpy_rec(state,refs,sub_type, field_src, field_dst, 0,
detect_cycle || sub_type->cycle);
if (XBT_LOG_ISENABLED(gras_ddt_exchange,xbt_log_priority_verbose)) {
if (field->send)
field->send(type,state,src);
- count += gras_datadesc_copy_rec(state,refs, sub_type, src, dst,0,
+ count += gras_datadesc_memcpy_rec(state,refs, sub_type, src, dst,0,
detect_cycle || sub_type->cycle);
break;
detect_cycle);
}
- count += gras_datadesc_copy_rec(state,refs, sub_type,
+ count += gras_datadesc_memcpy_rec(state,refs, sub_type,
*o_ref,(char*)l_referenced, subsubcount,
detect_cycle || sub_type->cycle);
VERB1("Array of %ld stuff, copy it in one after the other",array_count);
for (cpt=0; cpt<array_count; cpt++) {
VERB2("Copy the %dth stuff out of %ld",cpt,array_count);
- count += gras_datadesc_copy_rec(state,refs, sub_type, src_ptr, dst_ptr, 0,
+ count += gras_datadesc_memcpy_rec(state,refs, sub_type, src_ptr, dst_ptr, 0,
detect_cycle || sub_type->cycle);
src_ptr += elm_size;
dst_ptr += elm_size;
return count;
}
/**
- * gras_datadesc_copy:
+ * gras_datadesc_memcpy:
*
* Copy the data pointed by src and described by type
* to a new location, and store a pointer to it in dst.
*
*/
-int gras_datadesc_copy(gras_datadesc_type_t type,
+int gras_datadesc_memcpy(gras_datadesc_type_t type,
void *src, void *dst) {
xbt_ex_t e;
static gras_cbps_t state=NULL;
}
TRY {
- size = gras_datadesc_copy_rec(state,refs,type,(char*)src,(char*)dst,0,
- type->cycle);
+ size = gras_datadesc_memcpy_rec(state,refs,type,(char*)src,(char*)dst,0,
+ type->cycle);
} CLEANUP {
xbt_dict_reset(refs);
gras_cbps_reset(state);
/* error on remote host, carfull, payload is an exception */
msg->payl_size=gras_datadesc_size(gras_datadesc_by_name("ex_t"));
msg->payl=xbt_malloc(msg->payl_size);
- whole_payload_size = gras_datadesc_copy(gras_datadesc_by_name("ex_t"),
- payload,msg->payl);
+ whole_payload_size = gras_datadesc_memcpy(gras_datadesc_by_name("ex_t"),
+ payload,msg->payl);
} else if (kind == e_gras_msg_kind_rpcanswer) {
msg->payl_size=gras_datadesc_size(msgtype->answer_type);
msg->payl=xbt_malloc(msg->payl_size);
if (msgtype->answer_type)
- whole_payload_size = gras_datadesc_copy(msgtype->answer_type,
- payload, msg->payl);
+ whole_payload_size = gras_datadesc_memcpy(msgtype->answer_type,
+ payload, msg->payl);
} else {
msg->payl_size=gras_datadesc_size(msgtype->ctn_type);
msg->payl=msg->payl_size?xbt_malloc(msg->payl_size):NULL;
if (msgtype->ctn_type)
- whole_payload_size = gras_datadesc_copy(msgtype->ctn_type,
- payload, msg->payl);
+ whole_payload_size = gras_datadesc_memcpy(msgtype->ctn_type,
+ payload, msg->payl);
}
/* put the selectable socket on the queue */