1 //Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
3 //Distributed under the Boost Software License, Version 1.0. (See accompanying
4 //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 #ifndef UUID_1A590226753311DD9E4CCF6156D89593
7 #define UUID_1A590226753311DD9E4CCF6156D89593
9 #include <boost/exception/exception.hpp>
10 #include <boost/exception/detail/error_info_impl.hpp>
11 #include <boost/exception/detail/type_info.hpp>
12 #include <boost/shared_ptr.hpp>
20 template <class ErrorInfo
>
25 typename
ErrorInfo::value_type
const *
26 get( exception
const & x
)
28 if( exception_detail::error_info_container
* c
=x
.data_
.get() )
29 if( shared_ptr
<exception_detail::error_info_base
const> eib
= c
->get(BOOST_EXCEPTION_STATIC_TYPEID(ErrorInfo
)) )
32 BOOST_ASSERT( 0!=dynamic_cast<ErrorInfo
const *>(eib
.get()) );
34 ErrorInfo
const * w
= static_cast<ErrorInfo
const *>(eib
.get());
43 get_info
<throw_function
>
47 get( exception
const & x
)
49 return x
.throw_function_
? &x
.throw_function_
: 0;
59 get( exception
const & x
)
61 return x
.throw_file_
? &x
.throw_file_
: 0;
71 get( exception
const & x
)
73 return x
.throw_line_
!=-1 ? &x
.throw_line_
: 0;
79 template <class ErrorInfo
>
81 typename
ErrorInfo::value_type
const *
82 get_error_info( boost::exception
const & x
)
84 return exception_detail::get_info
<ErrorInfo
>::get(x
);
87 template <class ErrorInfo
,class E
>
89 typename
ErrorInfo::value_type
const *
90 get_error_info( E
const & some_exception
)
92 if( exception
const * x
= dynamic_cast<exception
const *>(&some_exception
) )
93 return exception_detail::get_info
<ErrorInfo
>::get(*x
);