~ubuntu-branches/debian/sid/boost1.49/sid

« back to all changes in this revision

Viewing changes to boost/python/detail/signature.hpp

  • Committer: Package Import Robot
  • Author(s): Steve M. Robbins
  • Date: 2012-02-26 00:31:44 UTC
  • Revision ID: package-import@ubuntu.com-20120226003144-eaytp12cbf6ubpms
Tags: upstream-1.49.0
ImportĀ upstreamĀ versionĀ 1.49.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
23
namespace boost { namespace python { namespace detail { 
 
24
 
 
25
struct signature_element
 
26
{
 
27
    char const* basename;
 
28
    converter::pytype_function pytype_f;
 
29
    bool lvalue;
 
30
};
 
31
 
 
32
struct py_func_sig_info
 
33
{
 
34
    signature_element const *signature;
 
35
    signature_element const *ret;
 
36
};
 
37
 
 
38
template <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
//
 
48
template <class Sig>
 
49
struct signature_base_select
 
50
{
 
51
    enum { arity = mpl::size<Sig>::value - 1 };
 
52
    typedef typename signature_arity<arity>::template impl<Sig> type;
 
53
};
 
54
 
 
55
template <class Sig>
 
56
struct 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
 
 
69
template <>
 
70
struct 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