sl@0: #if !defined(BOOST_PP_IS_ITERATING) sl@0: sl@0: // Copyright David Abrahams 2002. sl@0: // Distributed under the Boost Software License, Version 1.0. (See sl@0: // accompanying file LICENSE_1_0.txt or copy at sl@0: // http://www.boost.org/LICENSE_1_0.txt) sl@0: sl@0: # ifndef SIGNATURE_DWA20021121_HPP sl@0: # define SIGNATURE_DWA20021121_HPP sl@0: sl@0: # include sl@0: sl@0: # include sl@0: # include sl@0: sl@0: # include sl@0: # include sl@0: sl@0: # include sl@0: # include sl@0: sl@0: namespace boost { namespace python { namespace detail { sl@0: sl@0: struct signature_element sl@0: { sl@0: char const* basename; sl@0: bool lvalue; sl@0: }; sl@0: sl@0: template struct signature_arity; sl@0: sl@0: # define BOOST_PP_ITERATION_PARAMS_1 \ sl@0: (3, (0, BOOST_PYTHON_MAX_ARITY + 1, )) sl@0: # include BOOST_PP_ITERATE() sl@0: sl@0: // A metafunction returning the base class used for sl@0: // sl@0: // signature. sl@0: // sl@0: template sl@0: struct signature_base_select sl@0: { sl@0: enum { arity = mpl::size::value - 1 }; sl@0: typedef typename signature_arity::template impl type; sl@0: }; sl@0: sl@0: template sl@0: struct signature sl@0: : signature_base_select::type sl@0: { sl@0: }; sl@0: sl@0: }}} // namespace boost::python::detail sl@0: sl@0: # endif // SIGNATURE_DWA20021121_HPP sl@0: sl@0: #else sl@0: sl@0: # define N BOOST_PP_ITERATION() sl@0: sl@0: template <> sl@0: struct signature_arity sl@0: { sl@0: template sl@0: struct impl sl@0: { sl@0: static signature_element const* elements() sl@0: { sl@0: static signature_element const result[N+2] = { sl@0: sl@0: # define BOOST_PP_LOCAL_MACRO(i) \ sl@0: { \ sl@0: type_id::type>().name() \ sl@0: , indirect_traits::is_reference_to_non_const::type>::value \ sl@0: }, sl@0: sl@0: # define BOOST_PP_LOCAL_LIMITS (0, N) sl@0: # include BOOST_PP_LOCAL_ITERATE() sl@0: {0,0} sl@0: }; sl@0: return result; sl@0: } sl@0: }; sl@0: }; sl@0: sl@0: #endif // BOOST_PP_IS_ITERATING sl@0: sl@0: