| // Copyright David Abrahams 2002. |
| // 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) |
| #ifndef PYOBJECT_TYPE_DWA2002720_HPP |
| # define PYOBJECT_TYPE_DWA2002720_HPP |
| |
| # include <boost/python/cast.hpp> |
| |
| namespace boost { namespace python { namespace converter { |
| |
| BOOST_PYTHON_DECL PyObject* checked_downcast_impl(PyObject*, PyTypeObject*); |
| |
| // Used as a base class for specializations which need to provide |
| // Python type checking capability. |
| template <class Object, PyTypeObject* pytype> |
| struct pyobject_type |
| { |
| static bool check(PyObject* x) |
| { |
| return ::PyObject_IsInstance(x, (PyObject*)pytype); |
| } |
| |
| static Object* checked_downcast(PyObject* x) |
| { |
| return python::downcast<Object>( |
| (checked_downcast_impl)(x, pytype) |
| ); |
| } |
| #ifndef BOOST_PYTHON_NO_PY_SIGNATURES |
| static PyTypeObject const* get_pytype() { return pytype; } |
| #endif |
| }; |
| |
| }}} // namespace boost::python::converter |
| |
| #endif // PYOBJECT_TYPE_DWA2002720_HPP |