123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- // Copyright (C) 2005-2006 Douglas Gregor <doug.gregor -at- gmail.com>.
- // Use, modification and distribution is subject to the Boost Software
- // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- /** @file exception.hpp
- *
- * This header provides exception classes that report MPI errors to
- * the user and macros that translate MPI error codes into Boost.MPI
- * exceptions.
- */
- #ifndef BOOST_MPI_EXCEPTION_HPP
- #define BOOST_MPI_EXCEPTION_HPP
- #include <boost/mpi/config.hpp>
- #include <exception>
- #include <cassert>
- #include <string>
- #include <boost/config.hpp>
- #include <boost/throw_exception.hpp>
- namespace boost { namespace mpi {
- /** @brief Catch-all exception class for MPI errors.
- *
- * Instances of this class will be thrown when an MPI error
- * occurs. MPI failures that trigger these exceptions may or may not
- * be recoverable, depending on the underlying MPI
- * implementation. Consult the documentation for your MPI
- * implementation to determine the effect of MPI errors.
- */
- class BOOST_MPI_DECL exception : public std::exception
- {
- public:
- /**
- * Build a new @c exception exception.
- *
- * @param routine The MPI routine in which the error
- * occurred. This should be a pointer to a string constant: it
- * will not be copied.
- *
- * @param result_code The result code returned from the MPI
- * routine that aborted with an error.
- */
- exception(const char* routine, int result_code);
- virtual ~exception() throw();
- /**
- * A description of the error that occurred.
- */
- virtual const char * what () const throw ()
- {
- return this->message.c_str();
- }
- /** Retrieve the name of the MPI routine that reported the error. */
- const char* routine() const { return routine_; }
- /**
- * @brief Retrieve the result code returned from the MPI routine
- * that reported the error.
- */
- int result_code() const { return result_code_; }
- /**
- * @brief Returns the MPI error class associated with the error that
- * triggered this exception.
- */
- int error_class() const
- {
- int result;
- MPI_Error_class(result_code_, &result);
- return result;
- }
- protected:
- /// The MPI routine that triggered the error
- const char* routine_;
- /// The failed result code reported by the MPI implementation.
- int result_code_;
- /// The formatted error message
- std::string message;
- };
- /**
- * Call the MPI routine MPIFunc with arguments Args (surrounded by
- * parentheses). If the result is not MPI_SUCCESS, use
- * boost::throw_exception to throw an exception or abort, depending on
- * BOOST_NO_EXCEPTIONS.
- */
- #define BOOST_MPI_CHECK_RESULT( MPIFunc, Args ) \
- { \
- int _check_result = MPIFunc Args; \
- assert(_check_result == MPI_SUCCESS); \
- if (_check_result != MPI_SUCCESS) \
- boost::throw_exception(boost::mpi::exception(#MPIFunc, \
- _check_result)); \
- }
- } } // end namespace boost::mpi
- #endif // BOOST_MPI_EXCEPTION_HPP
|