/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */ /* * (C) 2006 by Argonne National Laboratory. * See COPYRIGHT in top-level directory. */ /* This file contains the prototypes for routines that are used with "external" modules such as ROMIO. These allow the different packages to hide their internal datatypes from one another */ #ifndef MPIEXT_H_INCLUDED #define MPIEXT_H_INCLUDED #include /* This routine, given an MPI_Errhandler (from a file), returns a pointer to the user-supplied error function. The last argument is set to an integer indicating that the function is MPI_ERRORS_RETURN (value == 1), MPI_ERRORS_ARE_FATAL (value == 0), a valid user-function (value == 2), or a valid user-function that is a C++ routine (value == 3) This routine is implemented in mpich/src/mpi/errhan/file_set_errhandler.c */ void MPIR_Get_file_error_routine(MPI_Errhandler, void (**)(MPI_File *, int *, ...), int *); /* Invoke the C++ error handler (this invokes a special C++ routine that in turn calls the provided function. That special routine also resets the errorcode to MPI_SUCCESS to prevent the MPICH C++ error handling code from throwing an exception when the user routine returns. */ int MPIR_File_call_cxx_errhandler(MPI_File *, int *, void (*)(MPI_File *, int *, ...)); /* These routines provide access to the MPI_Errhandler field within the ROMIO MPI_File structure */ int MPIR_ROMIO_Get_file_errhand(MPI_File, MPI_Errhandler *); int MPIR_ROMIO_Set_file_errhand(MPI_File, MPI_Errhandler); /* FIXME: This routine is also defined in adio.h */ int MPIO_Err_return_file(MPI_File, int); int MPIR_Err_create_code_valist(int, int, const char[], int, int, const char[], const char[], va_list); int MPIR_Err_is_fatal(int); void MPIR_Get_file_error_routine(MPI_Errhandler, void (**)(MPI_File *, int *, ...), int *); int MPIR_File_call_cxx_errhandler(MPI_File *, int *, void (*)(MPI_File *, int *, ...)); typedef int (*MPIR_Err_get_class_string_func_t) (int error, char *str, int length); void MPIR_Err_get_string(int, char *, int, MPIR_Err_get_class_string_func_t); struct MPIR_Comm; int MPIR_Abort(MPI_Comm comm, int mpi_errno, int exit_code, const char *error_msg); int MPIR_Ext_assert_fail(const char *cond, const char *file_name, int line_num); #if (!defined(NDEBUG) && (@HAVE_ERROR_CHECKING@)) #define MPIR_Ext_assert(a_) \ do { \ if (!(a_)) { \ MPIR_Ext_assert_fail(#a_, __FILE__, __LINE__); \ } \ } while (0) #else #define MPIR_Ext_assert(a_) do {} while (0) #endif extern int MPIR_Ext_dbg_romio_terse_enabled; extern int MPIR_Ext_dbg_romio_typical_enabled; extern int MPIR_Ext_dbg_romio_verbose_enabled; /* a copy of MPIU_Ensure_Aint_fits_in_pointer for external use, slightly * modified to use ROMIO's version of the pointer-casting macro */ #define MPIR_Ext_ensure_Aint_fits_in_pointer(aint) \ MPIR_Ext_assert((aint) == (MPI_Aint)(uintptr_t) ADIOI_AINT_CAST_TO_VOID_PTR(aint)); /* to be called early by ROMIO's initialization process in order to setup init-time * glue code that cannot be initialized statically */ int MPIR_Ext_init(void); void MPIR_Ext_cs_enter(void); void MPIR_Ext_cs_exit(void); void MPIR_Ext_cs_yield(void); /* to facilitate error checking */ int MPIR_Ext_datatype_iscommitted(MPI_Datatype datatype); /* make comm split based on access to a common file system easier */ int MPIR_Get_node_id(MPI_Comm comm, int rank, int *id); #endif