2
0
mirror of https://github.com/boostorg/python.git synced 2026-01-22 17:32:55 +00:00

Use new void_return mechanism

[SVN r14352]
This commit is contained in:
Dave Abrahams
2002-07-08 17:14:26 +00:00
parent b255796b33
commit 8b611322e5
5 changed files with 77 additions and 34 deletions

View File

@@ -14,6 +14,7 @@
# include <boost/preprocessor/enum_params.hpp>
# include <boost/preprocessor/repeat.hpp>
# include <boost/preprocessor/cat.hpp>
# include <boost/python/detail/void_return.hpp>
# include <boost/type.hpp>
namespace boost { namespace python {
@@ -27,7 +28,7 @@ template <
class R \
BOOST_PP_COMMA_IF(nargs) BOOST_PP_ENUM_PARAMS(nargs, class A) \
> \
typename converter::return_from_python<R>::result_type \
typename detail::returnable<R>::type \
call(PyObject* callable \
BOOST_PP_COMMA_IF(nargs) BOOST_PYTHON_ENUM_PARAMS2(nargs, (A,const& a)) \
, boost::type<R>* = 0 \

View File

@@ -14,6 +14,7 @@
# include <boost/preprocessor/enum_params.hpp>
# include <boost/preprocessor/repeat.hpp>
# include <boost/preprocessor/cat.hpp>
# include <boost/python/detail/void_return.hpp>
# include <boost/type.hpp>
namespace boost { namespace python {
@@ -27,7 +28,7 @@ template <
class R \
BOOST_PP_COMMA_IF(nargs) BOOST_PP_ENUM_PARAMS(nargs, class A) \
> \
typename converter::return_from_python<R>::result_type \
typename detail::returnable<R>::type \
call_method(PyObject* self, char const* name \
BOOST_PP_COMMA_IF(nargs) BOOST_PYTHON_ENUM_PARAMS2(nargs, (A,const& a)) \
, boost::type<R>* = 0 \

View File

@@ -0,0 +1,41 @@
// Copyright David Abrahams 2002. Permission to copy, use,
// modify, sell and distribute this software is granted provided this
// copyright notice appears in all copies. This software is provided
// "as is" without express or implied warranty, and with no claim as
// to its suitability for any purpose.
#ifndef VOID_RETURN_DWA200274_HPP
# define VOID_RETURN_DWA200274_HPP
namespace boost { namespace python { namespace detail {
struct void_return
{
void_return() {}
private:
void operator=(void_return const&);
};
template <class T>
struct returnable
{
typedef T type;
};
# ifdef BOOST_NO_VOID_RETURNS
template <>
struct returnable<void>
{
typedef void_return type;
};
# ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
template <> struct returnable<const void> : returnable<void> {};
template <> struct returnable<volatile void> : returnable<void> {};
template <> struct returnable<const volatile void> : returnable<void> {};
# endif
# endif // BOOST_NO_VOID_RETURNS
}}} // namespace boost::python::detail
#endif // VOID_RETURN_DWA200274_HPP

View File

@@ -11,7 +11,7 @@
// (replace-string "PyEval_CallFunction(" "\nPyEval_CallFunction(\n")
template<class R>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -20,7 +20,7 @@ call(PyObject*callable,boost::type<R>* =0)
callable,const_cast<char*>("(" ")")));
}
template<class R,class A0>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -30,7 +30,7 @@ call(PyObject*callable,A0 const&a0,boost::type<R>* =0)
,converter::arg_to_python<A0>(a0).get()));
}
template<class R,class A0,class A1>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,A1 const&a1,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -41,7 +41,7 @@ call(PyObject*callable,A0 const&a0,A1 const&a1,boost::type<R>* =0)
,converter::arg_to_python<A1>(a1).get()));
}
template<class R,class A0,class A1,class A2>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -53,7 +53,7 @@ call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,boost::type<R>* =0)
,converter::arg_to_python<A2>(a2).get()));
}
template<class R,class A0,class A1,class A2,class A3>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -66,7 +66,7 @@ call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,boost::ty
,converter::arg_to_python<A3>(a3).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -80,7 +80,7 @@ call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&
,converter::arg_to_python<A4>(a4).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -95,7 +95,7 @@ call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&
,converter::arg_to_python<A5>(a5).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -111,7 +111,7 @@ call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&
,converter::arg_to_python<A6>(a6).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -128,7 +128,7 @@ call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&
,converter::arg_to_python<A7>(a7).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -146,7 +146,7 @@ call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&
,converter::arg_to_python<A8>(a8).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -165,7 +165,7 @@ call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&
,converter::arg_to_python<A9>(a9).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -185,7 +185,7 @@ call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&
,converter::arg_to_python<A10>(a10).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -206,7 +206,7 @@ call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&
,converter::arg_to_python<A11>(a11).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11,class A12>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11,A12 const&a12,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -228,7 +228,7 @@ call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&
,converter::arg_to_python<A12>(a12).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11,class A12,class A13>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11,A12 const&a12,A13 const&a13,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -251,7 +251,7 @@ call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&
,converter::arg_to_python<A13>(a13).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11,class A12,class A13,class A14>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call(PyObject*callable,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11,A12 const&a12,A13 const&a13,A14 const&a14,boost::type<R>* =0)
{
converter::return_from_python<R>converter;

View File

@@ -11,7 +11,7 @@
// (replace-string "PyEval_CallMethod(" "\nPyEval_CallMethod(\n")
template<class R>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -20,7 +20,7 @@ call_method(PyObject*self,char const*name,boost::type<R>* =0)
self,const_cast<char*>(name),const_cast<char*>("(" ")")));
}
template<class R,class A0>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -30,7 +30,7 @@ call_method(PyObject*self,char const*name,A0 const&a0,boost::type<R>* =0)
,converter::arg_to_python<A0>(a0).get()));
}
template<class R,class A0,class A1>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -41,7 +41,7 @@ call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,boost::type<R>
,converter::arg_to_python<A1>(a1).get()));
}
template<class R,class A0,class A1,class A2>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -53,7 +53,7 @@ call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,bo
,converter::arg_to_python<A2>(a2).get()));
}
template<class R,class A0,class A1,class A2,class A3>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -66,7 +66,7 @@ call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3
,converter::arg_to_python<A3>(a3).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -80,7 +80,7 @@ call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3
,converter::arg_to_python<A4>(a4).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -95,7 +95,7 @@ call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3
,converter::arg_to_python<A5>(a5).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -111,7 +111,7 @@ call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3
,converter::arg_to_python<A6>(a6).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -128,7 +128,7 @@ call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3
,converter::arg_to_python<A7>(a7).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -146,7 +146,7 @@ call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3
,converter::arg_to_python<A8>(a8).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -165,7 +165,7 @@ call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3
,converter::arg_to_python<A9>(a9).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -185,7 +185,7 @@ call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3
,converter::arg_to_python<A10>(a10).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -206,7 +206,7 @@ call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3
,converter::arg_to_python<A11>(a11).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11,class A12>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11,A12 const&a12,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -228,7 +228,7 @@ call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3
,converter::arg_to_python<A12>(a12).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11,class A12,class A13>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11,A12 const&a12,A13 const&a13,boost::type<R>* =0)
{
converter::return_from_python<R>converter;
@@ -251,7 +251,7 @@ call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3
,converter::arg_to_python<A13>(a13).get()));
}
template<class R,class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11,class A12,class A13,class A14>
typename converter::return_from_python<R>::result_type
typename detail::returnable<R>::type
call_method(PyObject*self,char const*name,A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11,A12 const&a12,A13 const&a13,A14 const&a14,boost::type<R>* =0)
{
converter::return_from_python<R>converter;