1 //================================================================================================= 2 /*! 3 // \file blaze/math/Exception.h 4 // \brief Header file for the exception macros of the math module 5 // 6 // Copyright (C) 2012-2020 Klaus Iglberger - All Rights Reserved 7 // 8 // This file is part of the Blaze library. You can redistribute it and/or modify it under 9 // the terms of the New (Revised) BSD License. Redistribution and use in source and binary 10 // forms, with or without modification, are permitted provided that the following conditions 11 // are met: 12 // 13 // 1. Redistributions of source code must retain the above copyright notice, this list of 14 // conditions and the following disclaimer. 15 // 2. Redistributions in binary form must reproduce the above copyright notice, this list 16 // of conditions and the following disclaimer in the documentation and/or other materials 17 // provided with the distribution. 18 // 3. Neither the names of the Blaze development group nor the names of its contributors 19 // may be used to endorse or promote products derived from this software without specific 20 // prior written permission. 21 // 22 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 23 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24 // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 25 // SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 26 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 27 // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 28 // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 30 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 31 // DAMAGE. 32 */ 33 //================================================================================================= 34 35 #ifndef _BLAZE_MATH_EXCEPTION_H_ 36 #define _BLAZE_MATH_EXCEPTION_H_ 37 38 39 //************************************************************************************************* 40 // Includes 41 //************************************************************************************************* 42 43 #include <blaze/util/Exception.h> 44 45 46 47 48 //================================================================================================= 49 // 50 // EXCEPTION MACROS 51 // 52 //================================================================================================= 53 54 //************************************************************************************************* 55 /*!\def BLAZE_THROW_DIVISION_BY_ZERO 56 // \brief Macro for the emission of an exception on detection of a division by zero. 57 // \ingroup math 58 // 59 // This macro encapsulates the default way of \b Blaze to throw an exception on detection of 60 // a division by zero. Also, since it may be desirable to replace the type of exception by a 61 // custom exception type this macro provides an opportunity to customize the behavior. 62 // 63 // The macro excepts a single argument, which specifies the message of the exception: 64 65 \code 66 #define BLAZE_THROW_DIVISION_BY_ZERO( MESSAGE ) \ 67 BLAZE_THROW_RUNTIME_ERROR( MESSAGE ) 68 \endcode 69 70 // In order to customize the type of exception all that needs to be done is to define the macro 71 // prior to including any \a Blaze header file. This will override the \b Blaze default behavior. 72 // The following example demonstrates this by replacing \a std::runtime_error by a custom 73 // exception type: 74 75 \code 76 class DivisionByZero 77 { 78 public: 79 DivisionByZero(); 80 explicit DivisionByZero( const std::string& message ); 81 // ... 82 }; 83 84 #define BLAZE_THROW_DIVISION_BY_ZERO( MESSAGE ) \ 85 throw DivisionByZero( MESSAGE ) 86 87 #include <blaze/Blaze.h> 88 \endcode 89 90 // \note It is recommended to define the macro such that a subsequent semicolon is required! 91 // 92 // \warning This macro is provided with the intention to assist in adapting \b Blaze to special 93 // conditions and environments. However, the customization of the type of exception via this 94 // macro may have an effect on the library. Thus be advised to use the macro with due care! 95 */ 96 #ifndef BLAZE_THROW_DIVISION_BY_ZERO 97 # define BLAZE_THROW_DIVISION_BY_ZERO( MESSAGE ) BLAZE_THROW_RUNTIME_ERROR( MESSAGE ) 98 #endif 99 //************************************************************************************************* 100 101 102 //************************************************************************************************* 103 /*!\def BLAZE_THROW_LAPACK_ERROR 104 // \brief Macro for the emission of an exception on detection of a LAPACK error. 105 // \ingroup math 106 // 107 // This macro encapsulates the default way of \b Blaze to throw an exception when encountering 108 // a LAPACK error (for instance when trying to invert a singular matrix). Also, since it may be 109 // desirable to replace the type of exception by a custom exception type this macro provides an 110 // opportunity to customize the behavior. 111 // 112 // The macro excepts a single argument, which specifies the message of the exception: 113 114 \code 115 #define BLAZE_THROW_LAPACK_ERROR( MESSAGE ) \ 116 BLAZE_THROW_RUNTIME_ERROR( MESSAGE ) 117 \endcode 118 119 // In order to customize the type of exception all that needs to be done is to define the macro 120 // prior to including any \a Blaze header file. This will override the \b Blaze default behavior. 121 // The following example demonstrates this by replacing \a std::runtime_error by a custom 122 // exception type: 123 124 \code 125 class LapackError 126 { 127 public: 128 LapackError(); 129 explicit LapackError( const std::string& message ); 130 // ... 131 }; 132 133 #define BLAZE_THROW_LAPACK_ERROR( MESSAGE ) \ 134 throw LapackError( MESSAGE ) 135 136 #include <blaze/Blaze.h> 137 \endcode 138 139 // \note It is recommended to define the macro such that a subsequent semicolon is required! 140 // 141 // \warning This macro is provided with the intention to assist in adapting \b Blaze to special 142 // conditions and environments. However, the customization of the type of exception via this 143 // macro may have an effect on the library. Thus be advised to use the macro with due care! 144 */ 145 #ifndef BLAZE_THROW_LAPACK_ERROR 146 # define BLAZE_THROW_LAPACK_ERROR( MESSAGE ) BLAZE_THROW_RUNTIME_ERROR( MESSAGE ) 147 #endif 148 //************************************************************************************************* 149 150 #endif 151