Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
remove useless (as for now) code
[simgrid.git] / src / smpi / smpi_mpi_dt.c
index 923193b..bedd205 100644 (file)
@@ -150,7 +150,8 @@ CREATE_MPI_DATATYPE(MPI_PTR, void*);
  */
 int is_datatype_valid(MPI_Datatype datatype) {
     return datatype != MPI_DATATYPE_NULL
-        && (datatype->flags & DT_FLAG_COMMITED);
+        && (datatype->flags & DT_FLAG_COMMITED)
+        && (smpi_datatype_size(datatype)>0);
 }
 
 size_t smpi_datatype_size(MPI_Datatype datatype)
@@ -182,12 +183,20 @@ MPI_Datatype smpi_datatype_dup(MPI_Datatype datatype)
 int smpi_datatype_extent(MPI_Datatype datatype, MPI_Aint * lb,
                          MPI_Aint * extent)
 {
+  if(datatype == MPI_DATATYPE_NULL){
+    *lb=0;
+    *extent=0;
+    return MPI_SUCCESS;
+  }
   *lb = datatype->lb;
   *extent = datatype->ub - datatype->lb;
   return MPI_SUCCESS;
 }
 
 MPI_Aint smpi_datatype_get_extent(MPI_Datatype datatype){
+  if(datatype == MPI_DATATYPE_NULL){
+    return 0;
+  }
   return datatype->ub - datatype->lb;
 }
 
@@ -1261,6 +1270,8 @@ static void max_func(void *a, void *b, int *length,
     APPLY_FUNC(a, b, length, unsigned int, MAX_OP);
   } else if (*datatype == MPI_UNSIGNED_LONG) {
     APPLY_FUNC(a, b, length, unsigned long, MAX_OP);
+  } else if (*datatype == MPI_UNSIGNED_CHAR) {
+    APPLY_FUNC(a, b, length, unsigned char, MAX_OP);
   } else if (*datatype == MPI_FLOAT) {
     APPLY_FUNC(a, b, length, float, MAX_OP);
   } else if (*datatype == MPI_DOUBLE) {
@@ -1287,6 +1298,8 @@ static void min_func(void *a, void *b, int *length,
     APPLY_FUNC(a, b, length, unsigned int, MIN_OP);
   } else if (*datatype == MPI_UNSIGNED_LONG) {
     APPLY_FUNC(a, b, length, unsigned long, MIN_OP);
+  } else if (*datatype == MPI_UNSIGNED_CHAR) {
+    APPLY_FUNC(a, b, length, unsigned char, MIN_OP);
   } else if (*datatype == MPI_FLOAT) {
     APPLY_FUNC(a, b, length, float, MIN_OP);
   } else if (*datatype == MPI_DOUBLE) {
@@ -1313,6 +1326,8 @@ static void sum_func(void *a, void *b, int *length,
     APPLY_FUNC(a, b, length, unsigned int, SUM_OP);
   } else if (*datatype == MPI_UNSIGNED_LONG) {
     APPLY_FUNC(a, b, length, unsigned long, SUM_OP);
+  } else if (*datatype == MPI_UNSIGNED_CHAR) {
+    APPLY_FUNC(a, b, length, unsigned char, SUM_OP);
   } else if (*datatype == MPI_FLOAT) {
     APPLY_FUNC(a, b, length, float, SUM_OP);
   } else if (*datatype == MPI_DOUBLE) {
@@ -1345,6 +1360,8 @@ static void prod_func(void *a, void *b, int *length,
     APPLY_FUNC(a, b, length, unsigned int, PROD_OP);
   } else if (*datatype == MPI_UNSIGNED_LONG) {
     APPLY_FUNC(a, b, length, unsigned long, PROD_OP);
+  } else if (*datatype == MPI_UNSIGNED_CHAR) {
+    APPLY_FUNC(a, b, length, unsigned char, PROD_OP);
   } else if (*datatype == MPI_FLOAT) {
     APPLY_FUNC(a, b, length, float, PROD_OP);
   } else if (*datatype == MPI_DOUBLE) {
@@ -1377,6 +1394,8 @@ static void land_func(void *a, void *b, int *length,
     APPLY_FUNC(a, b, length, unsigned int, LAND_OP);
   } else if (*datatype == MPI_UNSIGNED_LONG) {
     APPLY_FUNC(a, b, length, unsigned long, LAND_OP);
+  } else if (*datatype == MPI_UNSIGNED_CHAR) {
+    APPLY_FUNC(a, b, length, unsigned char, LAND_OP);
   } else if (*datatype == MPI_C_BOOL) {
     APPLY_FUNC(a, b, length, _Bool, LAND_OP);
   }
@@ -1399,6 +1418,8 @@ static void lor_func(void *a, void *b, int *length,
     APPLY_FUNC(a, b, length, unsigned int, LOR_OP);
   } else if (*datatype == MPI_UNSIGNED_LONG) {
     APPLY_FUNC(a, b, length, unsigned long, LOR_OP);
+  } else if (*datatype == MPI_UNSIGNED_CHAR) {
+    APPLY_FUNC(a, b, length, unsigned char, LOR_OP);
   } else if (*datatype == MPI_C_BOOL) {
     APPLY_FUNC(a, b, length, _Bool, LOR_OP);
   }
@@ -1421,6 +1442,8 @@ static void lxor_func(void *a, void *b, int *length,
     APPLY_FUNC(a, b, length, unsigned int, LXOR_OP);
   } else if (*datatype == MPI_UNSIGNED_LONG) {
     APPLY_FUNC(a, b, length, unsigned long, LXOR_OP);
+  } else if (*datatype == MPI_UNSIGNED_CHAR) {
+    APPLY_FUNC(a, b, length, unsigned char, LXOR_OP);
   } else if (*datatype == MPI_C_BOOL) {
     APPLY_FUNC(a, b, length, _Bool, LXOR_OP);
   }
@@ -1431,8 +1454,7 @@ static void band_func(void *a, void *b, int *length,
 {
   if (*datatype == MPI_CHAR) {
     APPLY_FUNC(a, b, length, char, BAND_OP);
-  }
-  if (*datatype == MPI_SHORT) {
+  }else if (*datatype == MPI_SHORT) {
     APPLY_FUNC(a, b, length, short, BAND_OP);
   } else if (*datatype == MPI_INT) {
     APPLY_FUNC(a, b, length, int, BAND_OP);
@@ -1444,6 +1466,8 @@ static void band_func(void *a, void *b, int *length,
     APPLY_FUNC(a, b, length, unsigned int, BAND_OP);
   } else if (*datatype == MPI_UNSIGNED_LONG) {
     APPLY_FUNC(a, b, length, unsigned long, BAND_OP);
+  } else if (*datatype == MPI_UNSIGNED_CHAR) {
+    APPLY_FUNC(a, b, length, unsigned char, BAND_OP);
   } else if (*datatype == MPI_BYTE) {
     APPLY_FUNC(a, b, length, uint8_t, BAND_OP);
   }
@@ -1466,6 +1490,8 @@ static void bor_func(void *a, void *b, int *length,
     APPLY_FUNC(a, b, length, unsigned int, BOR_OP);
   } else if (*datatype == MPI_UNSIGNED_LONG) {
     APPLY_FUNC(a, b, length, unsigned long, BOR_OP);
+  } else if (*datatype == MPI_UNSIGNED_CHAR) {
+    APPLY_FUNC(a, b, length, unsigned char, BOR_OP);
   } else if (*datatype == MPI_BYTE) {
     APPLY_FUNC(a, b, length, uint8_t, BOR_OP);
   }
@@ -1488,6 +1514,8 @@ static void bxor_func(void *a, void *b, int *length,
     APPLY_FUNC(a, b, length, unsigned int, BXOR_OP);
   } else if (*datatype == MPI_UNSIGNED_LONG) {
     APPLY_FUNC(a, b, length, unsigned long, BXOR_OP);
+  } else if (*datatype == MPI_UNSIGNED_CHAR) {
+    APPLY_FUNC(a, b, length, unsigned char, BXOR_OP);
   } else if (*datatype == MPI_BYTE) {
     APPLY_FUNC(a, b, length, uint8_t, BXOR_OP);
   }