56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
//  (C) Copyright David Abrahams 2000.
 | 
						|
// 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 author gratefully acknowleges the support of Dragon Systems, Inc., in
 | 
						|
//  producing this work.
 | 
						|
 | 
						|
#ifndef ERRORS_DWA052500_H_
 | 
						|
# define ERRORS_DWA052500_H_
 | 
						|
 | 
						|
# include <boost/python/detail/prefix.hpp>
 | 
						|
# include <boost/function/function0.hpp>
 | 
						|
 | 
						|
namespace boost { namespace python {
 | 
						|
 | 
						|
struct BOOST_PYTHON_DECL_EXCEPTION error_already_set
 | 
						|
{
 | 
						|
  virtual ~error_already_set();
 | 
						|
};
 | 
						|
 | 
						|
// Handles exceptions caught just before returning to Python code.
 | 
						|
// Returns true iff an exception was caught.
 | 
						|
BOOST_PYTHON_DECL bool handle_exception_impl(function0<void>);
 | 
						|
 | 
						|
template <class T>
 | 
						|
bool handle_exception(T f)
 | 
						|
{
 | 
						|
    return handle_exception_impl(function0<void>(boost::ref(f)));
 | 
						|
}
 | 
						|
 | 
						|
namespace detail { inline void rethrow() { throw; } }
 | 
						|
 | 
						|
inline void handle_exception()
 | 
						|
{
 | 
						|
    handle_exception(detail::rethrow);
 | 
						|
}
 | 
						|
 | 
						|
BOOST_PYTHON_DECL void throw_error_already_set();
 | 
						|
 | 
						|
template <class T>
 | 
						|
inline T* expect_non_null(T* x)
 | 
						|
{
 | 
						|
    if (x == 0)
 | 
						|
        throw_error_already_set();
 | 
						|
    return x;
 | 
						|
}
 | 
						|
 | 
						|
// Return source if it is an instance of pytype; throw an appropriate
 | 
						|
// exception otherwise.
 | 
						|
BOOST_PYTHON_DECL PyObject* pytype_check(PyTypeObject* pytype, PyObject* source);
 | 
						|
 | 
						|
}} // namespace boost::python
 | 
						|
 | 
						|
#endif // ERRORS_DWA052500_H_
 |