#include "mpi.h"
#include "ruby.h"
#include "global.h"
VALUE cException;
void mpi_exception(int retcode)
{
switch (retcode) {
case MPI_SUCCESS:
break;
case MPI_ERR_BUFFER:
rb_raise(cException, "Invalid buffer pointer");
break;
case MPI_ERR_COUNT:
rb_raise(cException, "Invalid count argument");
break;
case MPI_ERR_TYPE:
rb_raise(cException, "Invalid datatype argument");
break;
case MPI_ERR_TAG:
rb_raise(cException, "Invalid tag argument");
break;
case MPI_ERR_COMM:
rb_raise(cException, "Invalid communicator");
break;
case MPI_ERR_RANK:
rb_raise(cException, "Invalid rank");
break;
case MPI_ERR_REQUEST:
rb_raise(cException, "Invalid request handle");
break;
case MPI_ERR_ROOT:
rb_raise(cException, "Invalid root");
break;
case MPI_ERR_GROUP:
rb_raise(cException, "Invalid group");
break;
case MPI_ERR_OP:
rb_raise(cException, "Invalid operation");
break;
case MPI_ERR_TOPOLOGY:
rb_raise(cException, "Invalid topology");
break;
case MPI_ERR_DIMS:
rb_raise(cException, "Invalid dimension argument");
break;
case MPI_ERR_ARG:
rb_raise(cException, "Invalid argument");
break;
case MPI_ERR_UNKNOWN:
rb_raise(cException, "Unknown error");
break;
case MPI_ERR_TRUNCATE:
rb_raise(cException, "Message truncated on receive");
break;
case MPI_ERR_OTHER:
rb_raise(cException, "Other error");
break;
case MPI_ERR_INTERN:
rb_raise(cException, "Internal MPI error");
break;
case MPI_ERR_PENDING:
rb_raise(cException, "Operation not complete");
break;
case MPI_ERR_IN_STATUS:
rb_raise(cException, "Error available in status");
break;
default:
rb_raise(cException, "Unknown error");
break;
}
}
void Init_MPI_Exception()
{
cException = rb_define_class_under(mMPI, "Exception", rb_eException);
}
syntax highlighted by Code2HTML, v. 0.9.1