Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
make sure that the gras_userdata_new() macro returns what just got malloced
[simgrid.git] / src / gras / DataDesc / ddt_create.c
index d0e2792..1866b1b 100644 (file)
@@ -43,7 +43,7 @@ static gras_datadesc_type_t gras_ddt_new(const char *name) {
   res->cycle = 0;
       
   xbt_set_add(gras_datadesc_set_local,
-              (xbt_set_elm_t)res,&gras_ddt_freev);
+              (xbt_set_elm_t)res,gras_ddt_freev);
   XBT_OUT;
   return res;
 }
@@ -177,7 +177,7 @@ gras_datadesc_type_t
   res->category_code = e_gras_datadesc_type_cat_struct;
   res->category.struct_data.fields = 
        xbt_dynar_new(sizeof(gras_dd_cat_field_t),
-                     &gras_dd_cat_field_free);
+                     gras_dd_cat_field_free);
 
   XBT_OUT;
   return res;
@@ -320,7 +320,7 @@ gras_datadesc_type_t
   res->category_code           = e_gras_datadesc_type_cat_union;
   res->category.union_data.fields =
      xbt_dynar_new(sizeof(gras_dd_cat_field_t*),
-                   &gras_dd_cat_field_free);
+                   gras_dd_cat_field_free);
   res->category.union_data.selector = selector;
 
   return res;
@@ -373,6 +373,22 @@ gras_datadesc_union_close(gras_datadesc_type_t union_type) {
    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,
@@ -627,12 +643,12 @@ static void gras_datadesc_dynar_cb(gras_datadesc_type_t typedesc, gras_cbps_t va
  */
 gras_datadesc_type_t
 gras_datadesc_dynar(gras_datadesc_type_t elm_t,
-                   void_f_pvoid_t *free_func) {
+                   void_f_pvoid_t free_func) {
    
   char *buffname;
   gras_datadesc_type_t res;
   
-  asprintf(&buffname,"dynar(%s)_s",elm_t->name);
+  asprintf(&buffname,"s_xbt_dynar_of_%s",elm_t->name);
    
   res = gras_datadesc_struct(buffname);
   
@@ -662,7 +678,7 @@ gras_datadesc_dynar(gras_datadesc_type_t elm_t,
 
   /* build a ref to it */
   free(buffname);
-  asprintf(&buffname,"dynar(%s)",elm_t->name);
+  asprintf(&buffname,"xbt_dynar_of_%s",elm_t->name);
   res=gras_datadesc_ref(buffname,res);
   free(buffname);
   return res;
@@ -688,7 +704,7 @@ static void gras_datadesc_matrix_cb(gras_datadesc_type_t typedesc, gras_cbps_t v
 }
 gras_datadesc_type_t
 gras_datadesc_matrix(gras_datadesc_type_t elm_t,
-                    void_f_pvoid_t const free_f) {
+                    void_f_pvoid_t const free_f) {
   char *buffname;
   gras_datadesc_type_t res;
 
@@ -755,7 +771,7 @@ static gras_dd_cat_field_t
    xbt_dynar_t         field_array;
    
    gras_dd_cat_field_t  field=NULL;
-   int                  field_num;
+   unsigned int         field_num;
    
    if (type->category_code == e_gras_datadesc_type_cat_union) {
       field_array = type->category.union_data.fields;
@@ -900,7 +916,8 @@ void gras_datadesc_free(gras_datadesc_type_t *type) {
  */
 int gras_datadesc_type_cmp(const gras_datadesc_type_t d1,
                           const gras_datadesc_type_t d2) {
-  int ret,cpt;
+  int ret;
+  unsigned int cpt;
   gras_dd_cat_field_t field1,field2;
   gras_datadesc_type_t field_desc_1,field_desc_2;