Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Do compile with debugging symbols. No idea how I managed to get there without them
[simgrid.git] / src / gras / DataDesc / ddt_create.c
index 415a05c..543ae35 100644 (file)
@@ -10,7 +10,7 @@
 
 #include "DataDesc/datadesc_private.h"
 
-GRAS_LOG_NEW_DEFAULT_SUBCATEGORY(new,datadesc);
+GRAS_LOG_NEW_DEFAULT_SUBCATEGORY(create,datadesc);
 
 /**
  * gras_ddt_freev:
@@ -195,12 +195,12 @@ gras_datadesc_declare_struct_append(gras_datadesc_type_t  *struct_type,
   gras_dd_cat_field_t *field;
   int arch;
  
-   gras_assert1(!struct_type->category.struct_data.closed,
-               "Cannot add anything to the already closed struct %s",
-               struct_type->name);
-   gras_assert1(field_type->size >= 0,
-               "Cannot add a dynamically sized field in structure %s",
-               struct_type->name);
+  gras_assert1(!struct_type->category.struct_data.closed,
+              "Cannot add anything to the already closed struct %s",
+              struct_type->name);
+  gras_assert1(field_type->size >= 0,
+              "Cannot add a dynamically sized field in structure %s",
+              struct_type->name);
     
   field=malloc(sizeof(gras_dd_cat_field_t));
   if (!field)
@@ -208,38 +208,47 @@ gras_datadesc_declare_struct_append(gras_datadesc_type_t  *struct_type,
 
   field->name   = strdup(name);
 
+  DEBUG0("----------------");
+  DEBUG4("PRE s={size=%d,align=%d,asize=%d} struct_boundary=%d",
+        struct_type->size[GRAS_THISARCH], 
+        struct_type->alignment[GRAS_THISARCH], 
+        struct_type->aligned_size[GRAS_THISARCH],
+        gras_arches[GRAS_THISARCH].struct_boundary);
+     
+     
   for (arch=0; arch<gras_arch_count; arch ++) {
     field->offset[arch] = aligned(struct_type->size[arch],
-                                 field_type->alignment[arch]);
-  }
-  field->code   = field_type->code;
-  field->pre    = NULL;
-  field->post   = NULL;
-  
-  TRY(gras_dynar_push(struct_type->category.struct_data.fields, &field));
+                                 min(field_type->alignment[arch],
+                                     gras_arches[arch].struct_boundary));
 
-  for (arch=0; arch<gras_arch_count; arch ++) {
     struct_type->size[arch] = field->offset[arch] + field_type->size[arch];
     struct_type->alignment[arch] = max(struct_type->alignment[arch],
                                       field_type->alignment[arch]);
     struct_type->aligned_size[arch] = aligned(struct_type->size[arch],
                                              struct_type->alignment[arch]);
   }
+  field->code   = field_type->code;
+  field->pre    = NULL;
+  field->post   = NULL;
+  
+  TRY(gras_dynar_push(struct_type->category.struct_data.fields, &field));
 
   DEBUG3("Push a %s into %s at offset %d.",
         field_type->name, struct_type->name,field->offset[GRAS_THISARCH]);
   DEBUG3("  f={size=%d,align=%d,asize=%d}",
         field_type->size[GRAS_THISARCH], 
-        field_type->alignment, field_type->aligned_size);
+        field_type->alignment[GRAS_THISARCH], 
+        field_type->aligned_size[GRAS_THISARCH]);
   DEBUG3("  s={size=%d,align=%d,asize=%d}",
         struct_type->size[GRAS_THISARCH], 
-        struct_type->alignment, struct_type->aligned_size);
+        struct_type->alignment[GRAS_THISARCH], 
+        struct_type->aligned_size[GRAS_THISARCH]);
   return no_error;
 }
 void
 gras_datadesc_declare_struct_close(gras_datadesc_type_t  *struct_type) {
    struct_type->category.struct_data.closed = 1;
-   INFO0("FIXME: Do something in gras_datadesc_declare_struct_close");
+   //   INFO0("FIXME: Do something in gras_datadesc_declare_struct_close");
 }
 
 /**
@@ -248,9 +257,9 @@ gras_datadesc_declare_struct_close(gras_datadesc_type_t  *struct_type) {
  * Create a new union and give a pointer to it 
  */
 gras_error_t 
-gras_datadesc_declare_union(const char                      *name,
-                  gras_datadesc_type_cb_int_t      selector,
-                  gras_datadesc_type_t           **dst) {
+gras_datadesc_declare_union(const char                   *name,
+                           gras_datadesc_type_cb_int_t   selector,
+                           gras_datadesc_type_t        **dst) {
 
   gras_error_t errcode;
   gras_datadesc_type_t *res;
@@ -326,7 +335,7 @@ gras_datadesc_declare_union_append(gras_datadesc_type_t  *union_type,
 void
 gras_datadesc_declare_union_close(gras_datadesc_type_t  *union_type) {
    union_type->category.union_data.closed = 1;
-   INFO0("FIXME: Do something in gras_datadesc_declare_array_close");
+   //   INFO0("FIXME: Do something in gras_datadesc_declare_union_close");
 }
 /**
  * gras_datadesc_declare_ref: