// this struct is here to handle the problem of non-contignous data
// for each such structure these function should be implemented (vector
// index hvector hindex struct)
typedef struct s_smpi_subtype{
void (*serialize)(const void * input, void *output, size_t count, void* subtype);
void (*unserialize)(const void * input, void *output, size_t count, void* subtype);
// this struct is here to handle the problem of non-contignous data
// for each such structure these function should be implemented (vector
// index hvector hindex struct)
typedef struct s_smpi_subtype{
void (*serialize)(const void * input, void *output, size_t count, void* subtype);
void (*unserialize)(const void * input, void *output, size_t count, void* subtype);
//*****************************************************************************************
typedef struct s_smpi_mpi_request {
//*****************************************************************************************
typedef struct s_smpi_mpi_request {
int smpi_datatype_struct(int count, int* blocklens, MPI_Aint* indices,
MPI_Datatype* old_types, MPI_Datatype* new_type);
int smpi_datatype_struct(int count, int* blocklens, MPI_Aint* indices,
MPI_Datatype* old_types, MPI_Datatype* new_type);
-void smpi_datatype_create(MPI_Datatype* new_type, int size, int has_subtype, void *struct_type, int flags);
+void smpi_datatype_create(MPI_Datatype* new_type, int size,int realsize, int has_subtype, void *struct_type, int flags);
void smpi_empty_status(MPI_Status * status);
MPI_Op smpi_op_new(MPI_User_function * function, int commute);
void smpi_op_destroy(MPI_Op op);
void smpi_empty_status(MPI_Status * status);
MPI_Op smpi_op_new(MPI_User_function * function, int commute);
void smpi_op_destroy(MPI_Op op);