You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
76 lines
1.9 KiB
76 lines
1.9 KiB
// 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 ARG_FROM_PYTHON_DWA2002128_HPP |
|
# define ARG_FROM_PYTHON_DWA2002128_HPP |
|
|
|
# include <boost/python/detail/prefix.hpp> |
|
# include <boost/python/converter/arg_from_python.hpp> |
|
# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \ |
|
|| BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800)) |
|
# include <boost/type_traits/remove_cv.hpp> |
|
#endif |
|
|
|
namespace boost { namespace python { |
|
|
|
template <class T> |
|
struct arg_from_python |
|
: converter::select_arg_from_python< |
|
# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \ |
|
|| BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800)) |
|
typename boost::remove_cv<T>::type |
|
# else |
|
T |
|
# endif |
|
>::type |
|
{ |
|
typedef typename converter::select_arg_from_python< |
|
# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \ |
|
|| BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800)) |
|
typename boost::remove_cv<T>::type |
|
# else |
|
T |
|
# endif |
|
>::type base; |
|
|
|
arg_from_python(PyObject*); |
|
}; |
|
|
|
// specialization for PyObject* |
|
template <> |
|
struct arg_from_python<PyObject*> |
|
{ |
|
typedef PyObject* result_type; |
|
|
|
arg_from_python(PyObject* p) : m_source(p) {} |
|
bool convertible() const { return true; } |
|
PyObject* operator()() const { return m_source; } |
|
private: |
|
PyObject* m_source; |
|
}; |
|
|
|
template <> |
|
struct arg_from_python<PyObject* const&> |
|
{ |
|
typedef PyObject* const& result_type; |
|
|
|
arg_from_python(PyObject* p) : m_source(p) {} |
|
bool convertible() const { return true; } |
|
PyObject*const& operator()() const { return m_source; } |
|
private: |
|
PyObject* m_source; |
|
}; |
|
|
|
// |
|
// implementations |
|
// |
|
template <class T> |
|
inline arg_from_python<T>::arg_from_python(PyObject* source) |
|
: base(source) |
|
{ |
|
} |
|
|
|
}} // namespace boost::python |
|
|
|
#endif // ARG_FROM_PYTHON_DWA2002128_HPP
|
|
|