]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/python/detail/signature.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / python / detail / signature.hpp
CommitLineData
7c673cae
FG
1#if !defined(BOOST_PP_IS_ITERATING)
2
3// Copyright David Abrahams 2002.
4// Distributed under the Boost Software License, Version 1.0. (See
5// accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt)
7
8# ifndef SIGNATURE_DWA20021121_HPP
9# define SIGNATURE_DWA20021121_HPP
10
11# include <boost/python/type_id.hpp>
12
13# include <boost/python/detail/preprocessor.hpp>
14# include <boost/python/detail/indirect_traits.hpp>
15# include <boost/python/converter/pytype_function.hpp>
16
17# include <boost/preprocessor/iterate.hpp>
18# include <boost/preprocessor/iteration/local.hpp>
19
20# include <boost/mpl/at.hpp>
21# include <boost/mpl/size.hpp>
22
23namespace boost { namespace python { namespace detail {
24
25struct signature_element
26{
27 char const* basename;
28 converter::pytype_function pytype_f;
29 bool lvalue;
30};
31
32struct py_func_sig_info
33{
34 signature_element const *signature;
35 signature_element const *ret;
36};
37
38template <unsigned> struct signature_arity;
39
40# define BOOST_PP_ITERATION_PARAMS_1 \
41 (3, (0, BOOST_PYTHON_MAX_ARITY + 1, <boost/python/detail/signature.hpp>))
42# include BOOST_PP_ITERATE()
43
44// A metafunction returning the base class used for
45//
46// signature<class F, class CallPolicies, class Sig>.
47//
48template <class Sig>
49struct signature_base_select
50{
51 enum { arity = mpl::size<Sig>::value - 1 };
52 typedef typename signature_arity<arity>::template impl<Sig> type;
53};
54
55template <class Sig>
56struct signature
57 : signature_base_select<Sig>::type
58{
59};
60
61}}} // namespace boost::python::detail
62
63# endif // SIGNATURE_DWA20021121_HPP
64
65#else
66
67# define N BOOST_PP_ITERATION()
68
69template <>
70struct signature_arity<N>
71{
72 template <class Sig>
73 struct impl
74 {
75 static signature_element const* elements()
76 {
77 static signature_element const result[N+2] = {
78
79#ifndef BOOST_PYTHON_NO_PY_SIGNATURES
80# define BOOST_PP_LOCAL_MACRO(i) \
81 { \
82 type_id<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>().name() \
83 , &converter::expected_pytype_for_arg<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>::get_pytype \
84 , indirect_traits::is_reference_to_non_const<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>::value \
85 },
86#else
87# define BOOST_PP_LOCAL_MACRO(i) \
88 { \
89 type_id<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>().name() \
90 , 0 \
91 , indirect_traits::is_reference_to_non_const<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>::value \
92 },
93#endif
94
95# define BOOST_PP_LOCAL_LIMITS (0, N)
96# include BOOST_PP_LOCAL_ITERATE()
97 {0,0,0}
98 };
99 return result;
100 }
101 };
102};
103
104#endif // BOOST_PP_IS_ITERATING
105
106