Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Generate error strings at the same time enum is generated.
authorAugustin Degomme <degomme@wasabi>
Fri, 6 Jul 2018 12:56:06 +0000 (14:56 +0200)
committerAugustin Degomme <degomme@wasabi>
Fri, 6 Jul 2018 12:58:55 +0000 (14:58 +0200)
- TODO : put back MPI_Errhandler_f2c and MPI_File_f2c unimplemented signatures...
Somehow converting from "#define MPI_SUCCESS 0" to their return type was OK but from enum is not for the compiler.

include/smpi/smpi.h
src/smpi/bindings/smpi_mpi.cpp
src/smpi/bindings/smpi_pmpi.cpp

index 32630ee..f64d602 100644 (file)
@@ -47,80 +47,92 @@ SG_BEGIN_DECL()
 #define MPI_IN_PLACE (void *)-222
 
 // errorcodes
 #define MPI_IN_PLACE (void *)-222
 
 // errorcodes
-#define MPI_SUCCESS                    0
-#define MPI_ERR_COMM                   1
-#define MPI_ERR_ARG                    2
-#define MPI_ERR_TYPE                   3
-#define MPI_ERR_REQUEST                4
-#define MPI_ERR_INTERN                 5
-#define MPI_ERR_COUNT                  6
-#define MPI_ERR_RANK                   7
-#define MPI_ERR_TAG                    8
-#define MPI_ERR_TRUNCATE               9
-#define MPI_ERR_GROUP                 10
-#define MPI_ERR_OP                    11
-#define MPI_ERR_OTHER                 12
-#define MPI_ERR_IN_STATUS             13
-#define MPI_ERR_PENDING               14
-#define MPI_ERR_BUFFER                15
-#define MPI_ERR_NAME                  16
-#define MPI_ERR_DIMS                  17
-#define MPI_ERR_TOPOLOGY              18
-#define MPI_ERR_NO_MEM                19
-#define MPI_ERR_WIN                   20
-#define MPI_ERR_INFO_VALUE            21
-#define MPI_ERR_INFO_KEY              22
-#define MPI_ERR_INFO_NOKEY            23
-#define MPI_ERR_ROOT                  24
-#define MPI_ERR_UNKNOWN               25
-#define MPI_ERR_KEYVAL                26
-#define MPI_ERR_BASE                  27
-#define MPI_ERR_SPAWN                 28
-#define MPI_ERR_PORT                  29
-#define MPI_ERR_SERVICE               30
-#define MPI_ERR_SIZE                  31
-#define MPI_ERR_DISP                  32
-#define MPI_ERR_INFO                  33
-#define MPI_ERR_LOCKTYPE              34
-#define MPI_ERR_ASSERT                35
-#define MPI_RMA_CONFLICT              36
-#define MPI_RMA_SYNC                  37
-#define MPI_ERR_FILE                  38
-#define MPI_ERR_NOT_SAME              39
-#define MPI_ERR_AMODE                 40
-#define MPI_ERR_UNSUPPORTED_DATAREP   41
-#define MPI_ERR_UNSUPPORTED_OPERATION 42
-#define MPI_ERR_NO_SUCH_FILE          43
-#define MPI_ERR_FILE_EXISTS           44
-#define MPI_ERR_BAD_FILE              45
-#define MPI_ERR_ACCESS                46
-#define MPI_ERR_NO_SPACE              47
-#define MPI_ERR_QUOTA                 48
-#define MPI_ERR_READ_ONLY             49
-#define MPI_ERR_FILE_IN_USE           50
-#define MPI_ERR_DUP_DATAREP           51
-#define MPI_ERR_CONVERSION            52
-#define MPI_ERR_IO                    53
-#define MPI_ERR_RMA_ATTACH            54
-#define MPI_ERR_RMA_CONFLICT          55
-#define MPI_ERR_RMA_RANGE             56
-#define MPI_ERR_RMA_SHARED            57
-#define MPI_ERR_RMA_SYNC              58
-#define MPI_ERR_RMA_FLAVOR            59
-#define MPI_T_ERR_CANNOT_INIT         60
-#define MPI_T_ERR_NOT_INITIALIZED     61
-#define MPI_T_ERR_MEMORY              62
-#define MPI_T_ERR_INVALID_INDEX       63
-#define MPI_T_ERR_INVALID_ITEM        64
-#define MPI_T_ERR_INVALID_SESSION     65
-#define MPI_T_ERR_INVALID_HANDLE      66
-#define MPI_T_ERR_OUT_OF_HANDLES      67
-#define MPI_T_ERR_OUT_OF_SESSIONS     68
-#define MPI_T_ERR_CVAR_SET_NOT_NOW    69
-#define MPI_T_ERR_CVAR_SET_NEVER      70
-#define MPI_T_ERR_PVAR_NO_WRITE       71
-#define MPI_T_ERR_PVAR_NO_STARTSTOP   72
-#define MPI_T_ERR_PVAR_NO_ATOMIC      73
+#define FOREACH_ERROR(ERROR)                    \
+          ERROR(MPI_SUCCESS)                    \
+          ERROR(MPI_ERR_COMM)                   \
+          ERROR(MPI_ERR_ARG)                    \
+          ERROR(MPI_ERR_TYPE)                   \
+          ERROR(MPI_ERR_REQUEST)                \
+          ERROR(MPI_ERR_INTERN)                 \
+          ERROR(MPI_ERR_COUNT)                  \
+          ERROR(MPI_ERR_RANK)                   \
+          ERROR(MPI_ERR_TAG)                    \
+          ERROR(MPI_ERR_TRUNCATE)               \
+          ERROR(MPI_ERR_GROUP)                  \
+          ERROR(MPI_ERR_OP)                     \
+          ERROR(MPI_ERR_OTHER)                  \
+          ERROR(MPI_ERR_IN_STATUS)              \
+          ERROR(MPI_ERR_PENDING)                \
+          ERROR(MPI_ERR_BUFFER)                 \
+          ERROR(MPI_ERR_NAME)                   \
+          ERROR(MPI_ERR_DIMS)                   \
+          ERROR(MPI_ERR_TOPOLOGY)               \
+          ERROR(MPI_ERR_NO_MEM)                 \
+          ERROR(MPI_ERR_WIN)                    \
+          ERROR(MPI_ERR_INFO_VALUE)             \
+          ERROR(MPI_ERR_INFO_KEY)               \
+          ERROR(MPI_ERR_INFO_NOKEY)             \
+          ERROR(MPI_ERR_ROOT)                   \
+          ERROR(MPI_ERR_UNKNOWN)                \
+          ERROR(MPI_ERR_KEYVAL)                 \
+          ERROR(MPI_ERR_BASE)                   \
+          ERROR(MPI_ERR_SPAWN)                  \
+          ERROR(MPI_ERR_PORT)                   \
+          ERROR(MPI_ERR_SERVICE)                \
+          ERROR(MPI_ERR_SIZE)                   \
+          ERROR(MPI_ERR_DISP)                   \
+          ERROR(MPI_ERR_INFO)                   \
+          ERROR(MPI_ERR_LOCKTYPE)               \
+          ERROR(MPI_ERR_ASSERT)                 \
+          ERROR(MPI_RMA_CONFLICT)               \
+          ERROR(MPI_RMA_SYNC)                   \
+          ERROR(MPI_ERR_FILE)                   \
+          ERROR(MPI_ERR_NOT_SAME)               \
+          ERROR(MPI_ERR_AMODE)                  \
+          ERROR(MPI_ERR_UNSUPPORTED_DATAREP)    \
+          ERROR(MPI_ERR_UNSUPPORTED_OPERATION)  \
+          ERROR(MPI_ERR_NO_SUCH_FILE)           \
+          ERROR(MPI_ERR_FILE_EXISTS)            \
+          ERROR(MPI_ERR_BAD_FILE)               \
+          ERROR(MPI_ERR_ACCESS)                 \
+          ERROR(MPI_ERR_NO_SPACE)               \
+          ERROR(MPI_ERR_QUOTA)                  \
+          ERROR(MPI_ERR_READ_ONLY)              \
+          ERROR(MPI_ERR_FILE_IN_USE)            \
+          ERROR(MPI_ERR_DUP_DATAREP)            \
+          ERROR(MPI_ERR_CONVERSION)             \
+          ERROR(MPI_ERR_IO)                     \
+          ERROR(MPI_ERR_RMA_ATTACH)             \
+          ERROR(MPI_ERR_RMA_CONFLICT)           \
+          ERROR(MPI_ERR_RMA_RANGE)              \
+          ERROR(MPI_ERR_RMA_SHARED)             \
+          ERROR(MPI_ERR_RMA_SYNC)               \
+          ERROR(MPI_ERR_RMA_FLAVOR)             \
+          ERROR(MPI_T_ERR_CANNOT_INIT)          \
+          ERROR(MPI_T_ERR_NOT_INITIALIZED)      \
+          ERROR(MPI_T_ERR_MEMORY)               \
+          ERROR(MPI_T_ERR_INVALID_INDEX)        \
+          ERROR(MPI_T_ERR_INVALID_ITEM)         \
+          ERROR(MPI_T_ERR_INVALID_SESSION)      \
+          ERROR(MPI_T_ERR_INVALID_HANDLE)       \
+          ERROR(MPI_T_ERR_OUT_OF_HANDLES)       \
+          ERROR(MPI_T_ERR_OUT_OF_SESSIONS)      \
+          ERROR(MPI_T_ERR_CVAR_SET_NOT_NOW)     \
+          ERROR(MPI_T_ERR_CVAR_SET_NEVER)       \
+          ERROR(MPI_T_ERR_PVAR_NO_WRITE)        \
+          ERROR(MPI_T_ERR_PVAR_NO_STARTSTOP)    \
+          ERROR(MPI_T_ERR_PVAR_NO_ATOMIC)
+
+#define GENERATE_ENUM(ENUM) ENUM,
+#define GENERATE_STRING(STRING) #STRING,
+
+enum ERROR_ENUM {
+    FOREACH_ERROR(GENERATE_ENUM)
+};
+
+static const char *smpi_error_string[] = {
+    FOREACH_ERROR(GENERATE_STRING)
+};
 
 #define MPI_ERRCODES_IGNORE (int *)0
 #define MPI_IDENT     0
 
 #define MPI_ERRCODES_IGNORE (int *)0
 #define MPI_IDENT     0
index e2c617a..e9700fb 100644 (file)
@@ -317,7 +317,7 @@ UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Errhandler_get,(MPI_Comm comm, MP
 UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Errhandler_set,(MPI_Comm comm, MPI_Errhandler errhandler) ,(comm, errhandler))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Register_datarep, (char *datarep, MPI_Datarep_conversion_function *read_conversion_fn, MPI_Datarep_conversion_function *write_conversion_fn, MPI_Datarep_extent_function *dtype_file_extent_fn, void *extra_state) ,(datarep, read_conversion_fn, write_conversion_fn, dtype_file_extent_fn, extra_state))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL(MPI_Fint, MPI_File_c2f,(MPI_File file), (file))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Errhandler_set,(MPI_Comm comm, MPI_Errhandler errhandler) ,(comm, errhandler))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Register_datarep, (char *datarep, MPI_Datarep_conversion_function *read_conversion_fn, MPI_Datarep_conversion_function *write_conversion_fn, MPI_Datarep_extent_function *dtype_file_extent_fn, void *extra_state) ,(datarep, read_conversion_fn, write_conversion_fn, dtype_file_extent_fn, extra_state))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL(MPI_Fint, MPI_File_c2f,(MPI_File file), (file))
-UNIMPLEMENTED_WRAPPED_PMPI_CALL(MPI_File, MPI_File_f2c,(MPI_Fint file), (file))
+//UNIMPLEMENTED_WRAPPED_PMPI_CALL(MPI_File, MPI_File_f2c,(MPI_Fint file), (file))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_call_errhandler,(MPI_File fh, int errorcode), (fh, errorcode))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_create_errhandler,(MPI_File_errhandler_function *function, MPI_Errhandler *errhandler),(function, errhandler))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int, MPI_File_set_errhandler,( MPI_File file, MPI_Errhandler errhandler), (file, errhandler))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_call_errhandler,(MPI_File fh, int errorcode), (fh, errorcode))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_create_errhandler,(MPI_File_errhandler_function *function, MPI_Errhandler *errhandler),(function, errhandler))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int, MPI_File_set_errhandler,( MPI_File file, MPI_Errhandler errhandler), (file, errhandler))
@@ -411,5 +411,5 @@ UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Unpublish_name,( char *service_name, MPI
 UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Win_set_errhandler,(MPI_Win win, MPI_Errhandler errhandler) ,(win, errhandler))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Win_test,(MPI_Win win, int *flag),(win, flag))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Win_sync,(MPI_Win win),(win))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Win_set_errhandler,(MPI_Win win, MPI_Errhandler errhandler) ,(win, errhandler))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Win_test,(MPI_Win win, int *flag),(win, flag))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Win_sync,(MPI_Win win),(win))
-UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(MPI_Errhandler, MPI_Errhandler_f2c,(MPI_Fint errhandler),(errhandler))
+//UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(MPI_Errhandler, MPI_Errhandler_f2c,(MPI_Fint errhandler),(errhandler))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(MPI_Fint, MPI_Errhandler_c2f,(MPI_Errhandler errhandler),(errhandler))
 UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(MPI_Fint, MPI_Errhandler_c2f,(MPI_Errhandler errhandler),(errhandler))
index c92f7e4..8939bbf 100644 (file)
@@ -209,34 +209,8 @@ int PMPI_Error_class(int errorcode, int* errorclass) {
 }
 
 int PMPI_Error_string(int errorcode, char* string, int* resultlen){
 }
 
 int PMPI_Error_string(int errorcode, char* string, int* resultlen){
-//TODO: put this somewhere else ?
-  const char* smpi_error_strings[] {
-    "MPI_SUCCESS","MPI_ERR_COMM","MPI_ERR_ARG","MPI_ERR_TYPE","MPI_ERR_REQUEST",
-    "MPI_ERR_INTERN","MPI_ERR_COUNT","MPI_ERR_RANK","MPI_ERR_TAG",
-    "MPI_ERR_TRUNCATE","MPI_ERR_GROUP","MPI_ERR_OP","MPI_ERR_OTHER",
-    "MPI_ERR_IN_STATUS","MPI_ERR_PENDING","MPI_ERR_BUFFER","MPI_ERR_NAME",
-    "MPI_ERR_DIMS","MPI_ERR_TOPOLOGY","MPI_ERR_NO_MEM","MPI_ERR_WIN",
-    "MPI_ERR_INFO_VALUE","MPI_ERR_INFO_KEY","MPI_ERR_INFO_NOKEY","MPI_ERR_ROOT",
-    "MPI_ERR_UNKNOWN","MPI_ERR_KEYVAL","MPI_ERR_BASE","MPI_ERR_SPAWN",
-    "MPI_ERR_PORT","MPI_ERR_SERVICE","MPI_ERR_SIZE","MPI_ERR_DISP","MPI_ERR_INFO",
-    "MPI_ERR_LOCKTYPE","MPI_ERR_ASSERT","MPI_RMA_CONFLICT","MPI_RMA_SYNC",
-    "MPI_ERR_FILE","MPI_ERR_NOT_SAME","MPI_ERR_AMODE","MPI_ERR_UNSUPPORTED_DATAREP",
-    "MPI_ERR_UNSUPPORTED_OPERATION","MPI_ERR_NO_SUCH_FILE","MPI_ERR_FILE_EXISTS",
-    "MPI_ERR_BAD_FILE","MPI_ERR_ACCESS","MPI_ERR_NO_SPACE","MPI_ERR_QUOTA",
-    "MPI_ERR_READ_ONLY","MPI_ERR_FILE_IN_USE","MPI_ERR_DUP_DATAREP",
-    "MPI_ERR_CONVERSION","MPI_ERR_IO","MPI_ERR_RMA_ATTACH","MPI_ERR_RMA_CONFLICT",
-    "MPI_ERR_RMA_RANGE","MPI_ERR_RMA_SHARED","MPI_ERR_RMA_SYNC",
-    "MPI_ERR_RMA_FLAVOR","MPI_T_ERR_CANNOT_INIT","MPI_T_ERR_NOT_INITIALIZED",
-    "MPI_T_ERR_MEMORY","MPI_T_ERR_INVALID_INDEX","MPI_T_ERR_INVALID_ITEM",
-    "MPI_T_ERR_INVALID_SESSION","MPI_T_ERR_INVALID_HANDLE",
-    "MPI_T_ERR_OUT_OF_HANDLES","MPI_T_ERR_OUT_OF_SESSIONS",
-    "MPI_T_ERR_CVAR_SET_NOT_NOW","MPI_T_ERR_CVAR_SET_NEVER",
-    "MPI_T_ERR_PVAR_NO_WRITE","MPI_T_ERR_PVAR_NO_STARTSTOP",
-    "MPI_T_ERR_PVAR_NO_ATOMIC"
-  };
-
-  *resultlen = strlen(smpi_error_strings[errorcode]);
-  strncpy(string, smpi_error_strings[errorcode], *resultlen);
+  *resultlen = strlen(smpi_error_string[errorcode]);
+  strncpy(string, smpi_error_string[errorcode], *resultlen);
   return MPI_SUCCESS;  
 }
 
   return MPI_SUCCESS;  
 }