20 #ifndef OMPI_C_BINDINGS_H
21 #define OMPI_C_BINDINGS_H
23 #include "ompi_config.h"
25 #include "ompi/datatype/ompi_datatype.h"
45 #define OMPI_CHECK_DATATYPE_FOR_SEND( RC, DDT, COUNT ) \
48 if( NULL == (DDT) || MPI_DATATYPE_NULL == (DDT) ) (RC) = MPI_ERR_TYPE; \
49 else if( (COUNT) < 0 ) (RC) = MPI_ERR_COUNT; \
50 else if( !opal_datatype_is_committed(&((DDT)->super)) ) (RC) = MPI_ERR_TYPE; \
51 else if( !opal_datatype_is_valid(&((DDT)->super)) ) (RC) = MPI_ERR_TYPE; \
54 #define OMPI_CHECK_DATATYPE_FOR_RECV( RC, DDT, COUNT ) \
57 if( NULL == (DDT) || MPI_DATATYPE_NULL == (DDT) ) (RC) = MPI_ERR_TYPE; \
58 else if( (COUNT) < 0 ) (RC) = MPI_ERR_COUNT; \
59 else if( !opal_datatype_is_committed(&((DDT)->super)) ) (RC) = MPI_ERR_TYPE; \
61 else if( !opal_datatype_is_valid(&((DDT)->super)) ) (RC) = MPI_ERR_TYPE; \
64 #define OMPI_CHECK_DATATYPE_FOR_ONE_SIDED( RC, DDT, COUNT ) \
67 if( NULL == (DDT) || MPI_DATATYPE_NULL == (DDT) ) (RC) = MPI_ERR_TYPE; \
68 else if( (COUNT) < 0 ) (RC) = MPI_ERR_COUNT; \
69 else if( !opal_datatype_is_committed(&((DDT)->super)) ) (RC) = MPI_ERR_TYPE; \
70 else if( opal_datatype_is_overlapped(&((DDT)->super)) ) (RC) = MPI_ERR_TYPE; \
71 else if( !opal_datatype_is_valid(&((DDT)->super)) ) (RC) = MPI_ERR_TYPE; \
78 #define OMPI_CHECK_USER_BUFFER(RC, BUFFER, DDT, COUNT) \
80 if ( NULL == (BUFFER) && 0 < (COUNT) && MPI_SUCCESS == (RC) ) { \
81 if ( (DDT)->super.flags & OPAL_DATATYPE_FLAG_PREDEFINED ) { \
82 (RC) = MPI_ERR_BUFFER; \
85 ptrdiff_t true_lb = 0; \
86 ptrdiff_t true_extended = 0; \
87 ompi_datatype_type_size((DDT), &size); \
88 ompi_datatype_get_true_extent((DDT), &true_lb, &true_extended); \
89 if ( 0 < size && 0 == true_lb ) { \
90 (RC) = MPI_ERR_BUFFER; \
Checkpoint functionality for Open MPI.