annotate DEPENDENCIES/generic/include/boost/numeric/ublas/exception.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 // Copyright (c) 2000-2011 Joerg Walter, Mathias Koch, David Bellot
Chris@16 2 //
Chris@16 3 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 4 // accompanying file LICENSE_1_0.txt or copy at
Chris@16 5 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 6
Chris@16 7 #ifndef _BOOST_UBLAS_EXCEPTION_
Chris@16 8 #define _BOOST_UBLAS_EXCEPTION_
Chris@16 9
Chris@16 10 #if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
Chris@16 11 #include <stdexcept>
Chris@16 12 #else
Chris@16 13 #include <cstdlib>
Chris@16 14 #endif
Chris@16 15 #ifndef BOOST_UBLAS_NO_STD_CERR
Chris@16 16 #include <iostream>
Chris@16 17 #endif
Chris@16 18
Chris@16 19 #include <boost/numeric/ublas/detail/config.hpp>
Chris@16 20
Chris@16 21 namespace boost { namespace numeric { namespace ublas {
Chris@16 22
Chris@16 23 /** \brief Exception raised when a division by zero occurs
Chris@16 24 */
Chris@16 25 struct divide_by_zero
Chris@16 26 #if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
Chris@16 27 // Inherit from standard exceptions as requested during review.
Chris@16 28 : public std::runtime_error
Chris@16 29 {
Chris@16 30 explicit divide_by_zero (const char *s = "divide by zero") :
Chris@16 31 std::runtime_error (s) {}
Chris@16 32 void raise () {
Chris@16 33 throw *this;
Chris@16 34 }
Chris@16 35 #else
Chris@16 36 {
Chris@16 37 divide_by_zero ()
Chris@16 38 {}
Chris@16 39 explicit divide_by_zero (const char *)
Chris@16 40 {}
Chris@16 41 void raise () {
Chris@16 42 std::abort ();
Chris@16 43 }
Chris@16 44 #endif
Chris@16 45 };
Chris@16 46
Chris@16 47 /** \brief Expception raised when some interal errors occurs like computations errors, zeros values where you should not have zeros, etc...
Chris@16 48 */
Chris@16 49 struct internal_logic
Chris@16 50 #if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
Chris@16 51 // Inherit from standard exceptions as requested during review.
Chris@16 52 : public std::logic_error {
Chris@16 53 explicit internal_logic (const char *s = "internal logic") :
Chris@16 54 std::logic_error (s) {}
Chris@16 55 void raise () {
Chris@16 56 throw *this;
Chris@16 57 }
Chris@16 58 #else
Chris@16 59 {
Chris@16 60 internal_logic ()
Chris@16 61 {}
Chris@16 62 explicit internal_logic (const char *)
Chris@16 63 {}
Chris@16 64 void raise () {
Chris@16 65 std::abort ();
Chris@16 66 }
Chris@16 67 #endif
Chris@16 68 };
Chris@16 69
Chris@16 70 struct external_logic
Chris@16 71 #if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
Chris@16 72 // Inherit from standard exceptions as requested during review.
Chris@16 73 : public std::logic_error {
Chris@16 74 explicit external_logic (const char *s = "external logic") :
Chris@16 75 std::logic_error (s) {}
Chris@16 76 // virtual const char *what () const throw () {
Chris@16 77 // return "exception: external logic";
Chris@16 78 // }
Chris@16 79 void raise () {
Chris@16 80 throw *this;
Chris@16 81 }
Chris@16 82 #else
Chris@16 83 {
Chris@16 84 external_logic ()
Chris@16 85 {}
Chris@16 86 explicit external_logic (const char *)
Chris@16 87 {}
Chris@16 88 void raise () {
Chris@16 89 std::abort ();
Chris@16 90 }
Chris@16 91 #endif
Chris@16 92 };
Chris@16 93
Chris@16 94 struct bad_argument
Chris@16 95 #if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
Chris@16 96 // Inherit from standard exceptions as requested during review.
Chris@16 97 : public std::invalid_argument {
Chris@16 98 explicit bad_argument (const char *s = "bad argument") :
Chris@16 99 std::invalid_argument (s) {}
Chris@16 100 void raise () {
Chris@16 101 throw *this;
Chris@16 102 }
Chris@16 103 #else
Chris@16 104 {
Chris@16 105 bad_argument ()
Chris@16 106 {}
Chris@16 107 explicit bad_argument (const char *)
Chris@16 108 {}
Chris@16 109 void raise () {
Chris@16 110 std::abort ();
Chris@16 111 }
Chris@16 112 #endif
Chris@16 113 };
Chris@16 114
Chris@16 115 /**
Chris@16 116 */
Chris@16 117 struct bad_size
Chris@16 118 #if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
Chris@16 119 // Inherit from standard exceptions as requested during review.
Chris@16 120 : public std::domain_error {
Chris@16 121 explicit bad_size (const char *s = "bad size") :
Chris@16 122 std::domain_error (s) {}
Chris@16 123 void raise () {
Chris@16 124 throw *this;
Chris@16 125 }
Chris@16 126 #else
Chris@16 127 {
Chris@16 128 bad_size ()
Chris@16 129 {}
Chris@16 130 explicit bad_size (const char *)
Chris@16 131 {}
Chris@16 132 void raise () {
Chris@16 133 std::abort ();
Chris@16 134 }
Chris@16 135 #endif
Chris@16 136 };
Chris@16 137
Chris@16 138 struct bad_index
Chris@16 139 #if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
Chris@16 140 // Inherit from standard exceptions as requested during review.
Chris@16 141 : public std::out_of_range {
Chris@16 142 explicit bad_index (const char *s = "bad index") :
Chris@16 143 std::out_of_range (s) {}
Chris@16 144 void raise () {
Chris@16 145 throw *this;
Chris@16 146 }
Chris@16 147 #else
Chris@16 148 {
Chris@16 149 bad_index ()
Chris@16 150 {}
Chris@16 151 explicit bad_index (const char *)
Chris@16 152 {}
Chris@16 153 void raise () {
Chris@16 154 std::abort ();
Chris@16 155 }
Chris@16 156 #endif
Chris@16 157 };
Chris@16 158
Chris@16 159 struct singular
Chris@16 160 #if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
Chris@16 161 // Inherit from standard exceptions as requested during review.
Chris@16 162 : public std::runtime_error {
Chris@16 163 explicit singular (const char *s = "singular") :
Chris@16 164 std::runtime_error (s) {}
Chris@16 165 void raise () {
Chris@16 166 throw *this;
Chris@16 167 }
Chris@16 168 #else
Chris@16 169 {
Chris@16 170 singular ()
Chris@16 171 {}
Chris@16 172 explicit singular (const char *)
Chris@16 173 {}
Chris@16 174 void raise () {
Chris@16 175 std::abort ();
Chris@16 176 }
Chris@16 177 #endif
Chris@16 178 };
Chris@16 179
Chris@16 180 struct non_real
Chris@16 181 #if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
Chris@16 182 // Inherit from standard exceptions as requested during review.
Chris@16 183 : public std::domain_error {
Chris@16 184 explicit non_real (const char *s = "exception: non real") :
Chris@16 185 std::domain_error (s) {}
Chris@16 186 void raise () {
Chris@16 187 throw *this;
Chris@16 188 }
Chris@16 189 #else
Chris@16 190 {
Chris@16 191 non_real ()
Chris@16 192 {}
Chris@16 193 explicit non_real (const char *)
Chris@16 194 {}
Chris@16 195 void raise () {
Chris@16 196 std::abort ();
Chris@16 197 }
Chris@16 198 #endif
Chris@16 199 };
Chris@16 200
Chris@16 201 #if BOOST_UBLAS_CHECK_ENABLE
Chris@16 202 // Macros are equivilent to
Chris@16 203 // template<class E>
Chris@16 204 // BOOST_UBLAS_INLINE
Chris@16 205 // void check (bool expression, const E &e) {
Chris@16 206 // if (! expression)
Chris@16 207 // e.raise ();
Chris@16 208 // }
Chris@16 209 // template<class E>
Chris@16 210 // BOOST_UBLAS_INLINE
Chris@16 211 // void check_ex (bool expression, const char *file, int line, const E &e) {
Chris@16 212 // if (! expression)
Chris@16 213 // e.raise ();
Chris@16 214 // }
Chris@16 215 #ifndef BOOST_UBLAS_NO_STD_CERR
Chris@16 216 #define BOOST_UBLAS_CHECK_FALSE(e) \
Chris@16 217 std::cerr << "Check failed in file " << __FILE__ << " at line " << __LINE__ << ":" << std::endl; \
Chris@16 218 e.raise ();
Chris@16 219 #define BOOST_UBLAS_CHECK(expression, e) \
Chris@16 220 if (! (expression)) { \
Chris@16 221 std::cerr << "Check failed in file " << __FILE__ << " at line " << __LINE__ << ":" << std::endl; \
Chris@16 222 std::cerr << #expression << std::endl; \
Chris@16 223 e.raise (); \
Chris@16 224 }
Chris@16 225 #define BOOST_UBLAS_CHECK_EX(expression, file, line, e) \
Chris@16 226 if (! (expression)) { \
Chris@16 227 std::cerr << "Check failed in file " << (file) << " at line " << (line) << ":" << std::endl; \
Chris@16 228 std::cerr << #expression << std::endl; \
Chris@16 229 e.raise (); \
Chris@16 230 }
Chris@16 231 #else
Chris@16 232 #define BOOST_UBLAS_CHECK_FALSE(e) \
Chris@16 233 e.raise ();
Chris@16 234 #define BOOST_UBLAS_CHECK(expression, e) \
Chris@16 235 if (! (expression)) { \
Chris@16 236 e.raise (); \
Chris@16 237 }
Chris@16 238 #define BOOST_UBLAS_CHECK_EX(expression, file, line, e) \
Chris@16 239 if (! (expression)) { \
Chris@16 240 e.raise (); \
Chris@16 241 }
Chris@16 242 #endif
Chris@16 243 #else
Chris@16 244 // Macros are equivilent to
Chris@16 245 // template<class E>
Chris@16 246 // BOOST_UBLAS_INLINE
Chris@16 247 // void check (bool expression, const E &e) {}
Chris@16 248 // template<class E>
Chris@16 249 // BOOST_UBLAS_INLINE
Chris@16 250 // void check_ex (bool expression, const char *file, int line, const E &e) {}
Chris@16 251 #define BOOST_UBLAS_CHECK_FALSE(e)
Chris@16 252 #define BOOST_UBLAS_CHECK(expression, e)
Chris@16 253 #define BOOST_UBLAS_CHECK_EX(expression, file, line, e)
Chris@16 254 #endif
Chris@16 255
Chris@16 256
Chris@16 257 #ifndef BOOST_UBLAS_USE_FAST_SAME
Chris@16 258 // Macro is equivilent to
Chris@16 259 // template<class T>
Chris@16 260 // BOOST_UBLAS_INLINE
Chris@16 261 // const T &same_impl (const T &size1, const T &size2) {
Chris@16 262 // BOOST_UBLAS_CHECK (size1 == size2, bad_argument ());
Chris@16 263 // return (std::min) (size1, size2);
Chris@16 264 // }
Chris@16 265 // #define BOOST_UBLAS_SAME(size1, size2) same_impl ((size1), (size2))
Chris@16 266 // need two types here because different containers can have
Chris@16 267 // different size_types (especially sparse types)
Chris@16 268 template<class T1, class T2>
Chris@16 269 BOOST_UBLAS_INLINE
Chris@16 270 // Kresimir Fresl and Dan Muller reported problems with COMO.
Chris@16 271 // We better change the signature instead of libcomo ;-)
Chris@16 272 // const T &same_impl_ex (const T &size1, const T &size2, const char *file, int line) {
Chris@16 273 T1 same_impl_ex (const T1 &size1, const T2 &size2, const char *file, int line) {
Chris@16 274 BOOST_UBLAS_CHECK_EX (size1 == size2, file, line, bad_argument ());
Chris@16 275 return (size1 < size2)?(size1):(size2);
Chris@16 276 }
Chris@16 277 template<class T>
Chris@16 278 BOOST_UBLAS_INLINE
Chris@16 279 T same_impl_ex (const T &size1, const T &size2, const char *file, int line) {
Chris@16 280 BOOST_UBLAS_CHECK_EX (size1 == size2, file, line, bad_argument ());
Chris@16 281 return (std::min) (size1, size2);
Chris@16 282 }
Chris@16 283 #define BOOST_UBLAS_SAME(size1, size2) same_impl_ex ((size1), (size2), __FILE__, __LINE__)
Chris@16 284 #else
Chris@16 285 // Macros are equivilent to
Chris@16 286 // template<class T>
Chris@16 287 // BOOST_UBLAS_INLINE
Chris@16 288 // const T &same_impl (const T &size1, const T &size2) {
Chris@16 289 // return size1;
Chris@16 290 // }
Chris@16 291 // #define BOOST_UBLAS_SAME(size1, size2) same_impl ((size1), (size2))
Chris@16 292 #define BOOST_UBLAS_SAME(size1, size2) (size1)
Chris@16 293 #endif
Chris@16 294
Chris@16 295 }}}
Chris@16 296
Chris@16 297 #endif