diff options
Diffstat (limited to 'boost/python/converter/pyobject_type.hpp')
-rw-r--r-- | boost/python/converter/pyobject_type.hpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/boost/python/converter/pyobject_type.hpp b/boost/python/converter/pyobject_type.hpp new file mode 100644 index 0000000000..526f9f9dba --- /dev/null +++ b/boost/python/converter/pyobject_type.hpp @@ -0,0 +1,37 @@ +// 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 |