Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Do not use non-letter chars in type name so that it's usable from this poor old parsi...
[simgrid.git] / src / gras / DataDesc / ddt_create.c
index 2c8db3e..ee432e1 100644 (file)
@@ -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,
@@ -613,6 +629,7 @@ static void gras_datadesc_dynar_cb(gras_datadesc_type_t typedesc, gras_cbps_t va
 
   dynar->elmsize = subtype->size[GRAS_THISARCH];
   dynar->size = dynar->used;
+  dynar->mutex = NULL;
 }
 
 /** \brief Declare a new type being a dynar in which each elements are of the given type
@@ -631,7 +648,7 @@ gras_datadesc_dynar(gras_datadesc_type_t elm_t,
   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);
   
@@ -651,6 +668,9 @@ gras_datadesc_dynar(gras_datadesc_type_t elm_t,
                              gras_datadesc_by_name("function pointer"));
   memcpy(res->extra,&free_func,sizeof(free_func));
       
+  gras_datadesc_struct_append(res, "mutex",
+                             gras_datadesc_by_name("data pointer"));
+   
   gras_datadesc_struct_close(res);
    
   gras_datadesc_cb_field_push(res, "used");
@@ -658,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;
@@ -708,7 +728,7 @@ gras_datadesc_matrix(gras_datadesc_type_t elm_t,
   gras_datadesc_cb_field_push(res, "lines");
   gras_datadesc_cb_field_push_multiplier(res, "rows");
 
-  gras_datadesc_cb_recv(res,  &gras_datadesc_dynar_cb);
+  gras_datadesc_cb_recv(res,  &gras_datadesc_matrix_cb);
   memcpy(res->extra,&free_f,sizeof(free_f));
 
   /* build a ref to it */