os/ossrv/ossrv_pub/boost_apis/boost/python/errors.hpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 //  (C) Copyright David Abrahams 2000.
     2 // Distributed under the Boost Software License, Version 1.0. (See
     3 // accompanying file LICENSE_1_0.txt or copy at
     4 // http://www.boost.org/LICENSE_1_0.txt)
     5 //
     6 //  The author gratefully acknowleges the support of Dragon Systems, Inc., in
     7 //  producing this work.
     8 
     9 #ifndef ERRORS_DWA052500_H_
    10 # define ERRORS_DWA052500_H_
    11 
    12 # include <boost/python/detail/prefix.hpp>
    13 # include <boost/function/function0.hpp>
    14 
    15 namespace boost { namespace python {
    16 
    17 struct BOOST_PYTHON_DECL_EXCEPTION error_already_set
    18 {
    19   virtual ~error_already_set();
    20 };
    21 
    22 // Handles exceptions caught just before returning to Python code.
    23 // Returns true iff an exception was caught.
    24 BOOST_PYTHON_DECL bool handle_exception_impl(function0<void>);
    25 
    26 template <class T>
    27 bool handle_exception(T f)
    28 {
    29     return handle_exception_impl(function0<void>(boost::ref(f)));
    30 }
    31 
    32 namespace detail { inline void rethrow() { throw; } }
    33 
    34 inline void handle_exception()
    35 {
    36     handle_exception(detail::rethrow);
    37 }
    38 
    39 BOOST_PYTHON_DECL void throw_error_already_set();
    40 
    41 template <class T>
    42 inline T* expect_non_null(T* x)
    43 {
    44     if (x == 0)
    45         throw_error_already_set();
    46     return x;
    47 }
    48 
    49 // Return source if it is an instance of pytype; throw an appropriate
    50 // exception otherwise.
    51 BOOST_PYTHON_DECL PyObject* pytype_check(PyTypeObject* pytype, PyObject* source);
    52 
    53 }} // namespace boost::python
    54 
    55 #endif // ERRORS_DWA052500_H_