Added boost header
This commit is contained in:
303
test/external/boost/numeric/ublas/exception.hpp
vendored
Normal file
303
test/external/boost/numeric/ublas/exception.hpp
vendored
Normal file
@@ -0,0 +1,303 @@
|
||||
//
|
||||
// Copyright (c) 2000-2002
|
||||
// Joerg Walter, Mathias Koch
|
||||
//
|
||||
// Distributed under 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)
|
||||
//
|
||||
// The authors gratefully acknowledge the support of
|
||||
// GeNeSys mbH & Co. KG in producing this work.
|
||||
//
|
||||
|
||||
#ifndef _BOOST_UBLAS_EXCEPTION_
|
||||
#define _BOOST_UBLAS_EXCEPTION_
|
||||
|
||||
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
||||
#include <stdexcept>
|
||||
#else
|
||||
#include <cstdlib>
|
||||
#endif
|
||||
#ifndef BOOST_UBLAS_NO_STD_CERR
|
||||
#include <iostream>
|
||||
#endif
|
||||
|
||||
#include <boost/numeric/ublas/detail/config.hpp>
|
||||
|
||||
namespace boost { namespace numeric { namespace ublas {
|
||||
|
||||
/** \brief Exception raised when a division by zero occurs
|
||||
*/
|
||||
struct divide_by_zero
|
||||
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
||||
// Inherit from standard exceptions as requested during review.
|
||||
: public std::runtime_error
|
||||
{
|
||||
explicit divide_by_zero (const char *s = "divide by zero") :
|
||||
std::runtime_error (s) {}
|
||||
void raise () {
|
||||
throw *this;
|
||||
}
|
||||
#else
|
||||
{
|
||||
divide_by_zero ()
|
||||
{}
|
||||
explicit divide_by_zero (const char *)
|
||||
{}
|
||||
void raise () {
|
||||
std::abort ();
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
/** \brief Expception raised when some interal errors occurs like computations errors, zeros values where you should not have zeros, etc...
|
||||
*/
|
||||
struct internal_logic
|
||||
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
||||
// Inherit from standard exceptions as requested during review.
|
||||
: public std::logic_error {
|
||||
explicit internal_logic (const char *s = "internal logic") :
|
||||
std::logic_error (s) {}
|
||||
void raise () {
|
||||
throw *this;
|
||||
}
|
||||
#else
|
||||
{
|
||||
internal_logic ()
|
||||
{}
|
||||
explicit internal_logic (const char *)
|
||||
{}
|
||||
void raise () {
|
||||
std::abort ();
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
struct external_logic
|
||||
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
||||
// Inherit from standard exceptions as requested during review.
|
||||
: public std::logic_error {
|
||||
explicit external_logic (const char *s = "external logic") :
|
||||
std::logic_error (s) {}
|
||||
// virtual const char *what () const throw () {
|
||||
// return "exception: external logic";
|
||||
// }
|
||||
void raise () {
|
||||
throw *this;
|
||||
}
|
||||
#else
|
||||
{
|
||||
external_logic ()
|
||||
{}
|
||||
explicit external_logic (const char *)
|
||||
{}
|
||||
void raise () {
|
||||
std::abort ();
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
struct bad_argument
|
||||
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
||||
// Inherit from standard exceptions as requested during review.
|
||||
: public std::invalid_argument {
|
||||
explicit bad_argument (const char *s = "bad argument") :
|
||||
std::invalid_argument (s) {}
|
||||
void raise () {
|
||||
throw *this;
|
||||
}
|
||||
#else
|
||||
{
|
||||
bad_argument ()
|
||||
{}
|
||||
explicit bad_argument (const char *)
|
||||
{}
|
||||
void raise () {
|
||||
std::abort ();
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
/**
|
||||
*/
|
||||
struct bad_size
|
||||
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
||||
// Inherit from standard exceptions as requested during review.
|
||||
: public std::domain_error {
|
||||
explicit bad_size (const char *s = "bad size") :
|
||||
std::domain_error (s) {}
|
||||
void raise () {
|
||||
throw *this;
|
||||
}
|
||||
#else
|
||||
{
|
||||
bad_size ()
|
||||
{}
|
||||
explicit bad_size (const char *)
|
||||
{}
|
||||
void raise () {
|
||||
std::abort ();
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
struct bad_index
|
||||
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
||||
// Inherit from standard exceptions as requested during review.
|
||||
: public std::out_of_range {
|
||||
explicit bad_index (const char *s = "bad index") :
|
||||
std::out_of_range (s) {}
|
||||
void raise () {
|
||||
throw *this;
|
||||
}
|
||||
#else
|
||||
{
|
||||
bad_index ()
|
||||
{}
|
||||
explicit bad_index (const char *)
|
||||
{}
|
||||
void raise () {
|
||||
std::abort ();
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
struct singular
|
||||
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
||||
// Inherit from standard exceptions as requested during review.
|
||||
: public std::runtime_error {
|
||||
explicit singular (const char *s = "singular") :
|
||||
std::runtime_error (s) {}
|
||||
void raise () {
|
||||
throw *this;
|
||||
}
|
||||
#else
|
||||
{
|
||||
singular ()
|
||||
{}
|
||||
explicit singular (const char *)
|
||||
{}
|
||||
void raise () {
|
||||
std::abort ();
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
struct non_real
|
||||
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
||||
// Inherit from standard exceptions as requested during review.
|
||||
: public std::domain_error {
|
||||
explicit non_real (const char *s = "exception: non real") :
|
||||
std::domain_error (s) {}
|
||||
void raise () {
|
||||
throw *this;
|
||||
}
|
||||
#else
|
||||
{
|
||||
non_real ()
|
||||
{}
|
||||
explicit non_real (const char *)
|
||||
{}
|
||||
void raise () {
|
||||
std::abort ();
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
#if BOOST_UBLAS_CHECK_ENABLE
|
||||
// Macros are equivilent to
|
||||
// template<class E>
|
||||
// BOOST_UBLAS_INLINE
|
||||
// void check (bool expression, const E &e) {
|
||||
// if (! expression)
|
||||
// e.raise ();
|
||||
// }
|
||||
// template<class E>
|
||||
// BOOST_UBLAS_INLINE
|
||||
// void check_ex (bool expression, const char *file, int line, const E &e) {
|
||||
// if (! expression)
|
||||
// e.raise ();
|
||||
// }
|
||||
#ifndef BOOST_UBLAS_NO_STD_CERR
|
||||
#define BOOST_UBLAS_CHECK_FALSE(e) \
|
||||
std::cerr << "Check failed in file " << __FILE__ << " at line " << __LINE__ << ":" << std::endl; \
|
||||
e.raise ();
|
||||
#define BOOST_UBLAS_CHECK(expression, e) \
|
||||
if (! (expression)) { \
|
||||
std::cerr << "Check failed in file " << __FILE__ << " at line " << __LINE__ << ":" << std::endl; \
|
||||
std::cerr << #expression << std::endl; \
|
||||
e.raise (); \
|
||||
}
|
||||
#define BOOST_UBLAS_CHECK_EX(expression, file, line, e) \
|
||||
if (! (expression)) { \
|
||||
std::cerr << "Check failed in file " << (file) << " at line " << (line) << ":" << std::endl; \
|
||||
std::cerr << #expression << std::endl; \
|
||||
e.raise (); \
|
||||
}
|
||||
#else
|
||||
#define BOOST_UBLAS_CHECK_FALSE(e) \
|
||||
e.raise ();
|
||||
#define BOOST_UBLAS_CHECK(expression, e) \
|
||||
if (! (expression)) { \
|
||||
e.raise (); \
|
||||
}
|
||||
#define BOOST_UBLAS_CHECK_EX(expression, file, line, e) \
|
||||
if (! (expression)) { \
|
||||
e.raise (); \
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
// Macros are equivilent to
|
||||
// template<class E>
|
||||
// BOOST_UBLAS_INLINE
|
||||
// void check (bool expression, const E &e) {}
|
||||
// template<class E>
|
||||
// BOOST_UBLAS_INLINE
|
||||
// void check_ex (bool expression, const char *file, int line, const E &e) {}
|
||||
#define BOOST_UBLAS_CHECK_FALSE(e)
|
||||
#define BOOST_UBLAS_CHECK(expression, e)
|
||||
#define BOOST_UBLAS_CHECK_EX(expression, file, line, e)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef BOOST_UBLAS_USE_FAST_SAME
|
||||
// Macro is equivilent to
|
||||
// template<class T>
|
||||
// BOOST_UBLAS_INLINE
|
||||
// const T &same_impl (const T &size1, const T &size2) {
|
||||
// BOOST_UBLAS_CHECK (size1 == size2, bad_argument ());
|
||||
// return (std::min) (size1, size2);
|
||||
// }
|
||||
// #define BOOST_UBLAS_SAME(size1, size2) same_impl ((size1), (size2))
|
||||
// need two types here because different containers can have
|
||||
// different size_types (especially sparse types)
|
||||
template<class T1, class T2>
|
||||
BOOST_UBLAS_INLINE
|
||||
// Kresimir Fresl and Dan Muller reported problems with COMO.
|
||||
// We better change the signature instead of libcomo ;-)
|
||||
// const T &same_impl_ex (const T &size1, const T &size2, const char *file, int line) {
|
||||
T1 same_impl_ex (const T1 &size1, const T2 &size2, const char *file, int line) {
|
||||
BOOST_UBLAS_CHECK_EX (size1 == size2, file, line, bad_argument ());
|
||||
return (size1 < size2)?(size1):(size2);
|
||||
}
|
||||
template<class T>
|
||||
BOOST_UBLAS_INLINE
|
||||
T same_impl_ex (const T &size1, const T &size2, const char *file, int line) {
|
||||
BOOST_UBLAS_CHECK_EX (size1 == size2, file, line, bad_argument ());
|
||||
return (std::min) (size1, size2);
|
||||
}
|
||||
#define BOOST_UBLAS_SAME(size1, size2) same_impl_ex ((size1), (size2), __FILE__, __LINE__)
|
||||
#else
|
||||
// Macros are equivilent to
|
||||
// template<class T>
|
||||
// BOOST_UBLAS_INLINE
|
||||
// const T &same_impl (const T &size1, const T &size2) {
|
||||
// return size1;
|
||||
// }
|
||||
// #define BOOST_UBLAS_SAME(size1, size2) same_impl ((size1), (size2))
|
||||
#define BOOST_UBLAS_SAME(size1, size2) (size1)
|
||||
#endif
|
||||
|
||||
}}}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user