mirror of
https://github.com/boostorg/python.git
synced 2026-01-23 05:42:30 +00:00
PP usage speedups (mostly for EDG)
[SVN r15286]
This commit is contained in:
@@ -54,8 +54,8 @@ call(PyObject* callable
|
||||
return converter(
|
||||
PyEval_CallFunction(
|
||||
callable
|
||||
, const_cast<char*>("(" BOOST_PP_REPEAT(N, BOOST_PYTHON_FIXED, "O") ")")
|
||||
BOOST_PP_REPEAT(N, BOOST_PYTHON_FAST_ARG_TO_PYTHON_GET, nil)
|
||||
, const_cast<char*>("(" BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FIXED, "O") ")")
|
||||
BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FAST_ARG_TO_PYTHON_GET, nil)
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
@@ -54,8 +54,8 @@ call_method(PyObject* self, char const* name
|
||||
PyEval_CallMethod(
|
||||
self
|
||||
, const_cast<char*>(name)
|
||||
, const_cast<char*>("(" BOOST_PP_REPEAT(N, BOOST_PYTHON_FIXED, "O") ")")
|
||||
BOOST_PP_REPEAT(N, BOOST_PYTHON_FAST_ARG_TO_PYTHON_GET, nil)
|
||||
, const_cast<char*>("(" BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FIXED, "O") ")")
|
||||
BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FAST_ARG_TO_PYTHON_GET, nil)
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
@@ -41,21 +41,21 @@ struct func_stubs_base {};
|
||||
#define BPL_IMPL_TYPEDEF_GEN(z, INDEX, DATA) \
|
||||
typedef typename boost::python::detail::type_at \
|
||||
< \
|
||||
BOOST_PP_ADD(INDEX, DATA), \
|
||||
BOOST_PP_ADD_D(1, INDEX, DATA), \
|
||||
SigT \
|
||||
>::type BOOST_PP_CAT(T, INDEX); \
|
||||
|
||||
#define BPL_IMPL_FUNC_WRAPPER_GEN(z, index, DATA) \
|
||||
static RT BOOST_PP_CAT(func_, index) ( \
|
||||
BOOST_PYTHON_BINARY_ENUM( \
|
||||
BOOST_PP_ADD(BOOST_PP_TUPLE_ELEM(3, 1, DATA), index), T, arg) \
|
||||
BOOST_PP_ADD_D(1, BOOST_PP_TUPLE_ELEM(3, 1, DATA), index), T, arg) \
|
||||
) \
|
||||
{ \
|
||||
BOOST_PP_TUPLE_ELEM(3, 2, DATA) \
|
||||
BOOST_PP_TUPLE_ELEM(3, 0, DATA) \
|
||||
( \
|
||||
BOOST_PP_ENUM_PARAMS( \
|
||||
BOOST_PP_ADD(BOOST_PP_TUPLE_ELEM(3, 1, DATA), index), \
|
||||
BOOST_PP_ADD_D(1, BOOST_PP_TUPLE_ELEM(3, 1, DATA), index), \
|
||||
arg \
|
||||
) \
|
||||
); \
|
||||
@@ -83,7 +83,7 @@ struct func_stubs_base {};
|
||||
( \
|
||||
BOOST_PP_INC(N_DFLTS), \
|
||||
BPL_IMPL_FUNC_WRAPPER_GEN, \
|
||||
(FNAME, BOOST_PP_SUB(N_ARGS, N_DFLTS), RETURN) \
|
||||
(FNAME, BOOST_PP_SUB_D(1, N_ARGS, N_DFLTS), RETURN) \
|
||||
) \
|
||||
}; \
|
||||
}; \
|
||||
@@ -92,14 +92,14 @@ struct func_stubs_base {};
|
||||
#define BPL_IMPL_MEM_FUNC_WRAPPER_GEN(z, index, DATA) \
|
||||
static RT BOOST_PP_CAT(func_, index) ( \
|
||||
ClassT& obj BOOST_PP_COMMA_IF( \
|
||||
BOOST_PP_ADD(BOOST_PP_TUPLE_ELEM(3, 1, DATA), index)) \
|
||||
BOOST_PP_ADD_D(1, BOOST_PP_TUPLE_ELEM(3, 1, DATA), index)) \
|
||||
BOOST_PYTHON_BINARY_ENUM( \
|
||||
BOOST_PP_ADD(BOOST_PP_TUPLE_ELEM(3, 1, DATA), index), T, arg) \
|
||||
BOOST_PP_ADD_D(1, BOOST_PP_TUPLE_ELEM(3, 1, DATA), index), T, arg) \
|
||||
) \
|
||||
{ \
|
||||
BOOST_PP_TUPLE_ELEM(3, 2, DATA) obj.BOOST_PP_TUPLE_ELEM(3, 0, DATA)( \
|
||||
BOOST_PP_ENUM_PARAMS( \
|
||||
BOOST_PP_ADD(BOOST_PP_TUPLE_ELEM(3, 1, DATA), index), arg \
|
||||
BOOST_PP_ADD_D(1, BOOST_PP_TUPLE_ELEM(3, 1, DATA), index), arg \
|
||||
) \
|
||||
); \
|
||||
}
|
||||
@@ -127,7 +127,7 @@ struct func_stubs_base {};
|
||||
( \
|
||||
BOOST_PP_INC(N_DFLTS), \
|
||||
BPL_IMPL_MEM_FUNC_WRAPPER_GEN, \
|
||||
(FNAME, BOOST_PP_SUB(N_ARGS, N_DFLTS), RETURN) \
|
||||
(FNAME, BOOST_PP_SUB_D(1, N_ARGS, N_DFLTS), RETURN) \
|
||||
) \
|
||||
}; \
|
||||
};
|
||||
@@ -265,7 +265,7 @@ struct func_stubs_base {};
|
||||
FNAME, \
|
||||
GENERATOR_NAME, \
|
||||
MAX_ARGS, \
|
||||
BOOST_PP_SUB(MAX_ARGS, MIN_ARGS) \
|
||||
BOOST_PP_SUB_D(1, MAX_ARGS, MIN_ARGS) \
|
||||
)
|
||||
|
||||
#define BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(GENERATOR_NAME, FNAME, MIN_ARGS, MAX_ARGS) \
|
||||
@@ -274,7 +274,7 @@ struct func_stubs_base {};
|
||||
FNAME, \
|
||||
GENERATOR_NAME, \
|
||||
MAX_ARGS, \
|
||||
BOOST_PP_SUB(MAX_ARGS, MIN_ARGS) \
|
||||
BOOST_PP_SUB_D(1, MAX_ARGS, MIN_ARGS) \
|
||||
)
|
||||
|
||||
// deprecated macro names (to be removed)
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
make_tuple(BOOST_PYTHON_BINARY_ENUM(N, A, const& a))
|
||||
{
|
||||
tuple result((detail::new_reference)::PyTuple_New(N));
|
||||
BOOST_PP_REPEAT(N, BOOST_PYTHON_MAKE_TUPLE_ARG, _)
|
||||
BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_MAKE_TUPLE_ARG, _)
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ struct returning<void>
|
||||
, PyObject*, P const* policies)
|
||||
{
|
||||
// check that each of the arguments is convertible
|
||||
BOOST_PP_REPEAT(N, BOOST_PYTHON_CHECK_CONVERSION, nil)
|
||||
BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_CHECK_CONVERSION, nil)
|
||||
|
||||
// find the result converter
|
||||
typedef typename P::result_converter result_converter;
|
||||
@@ -104,7 +104,7 @@ struct returning<void>
|
||||
if (!cr.convertible() || !policies->precall(args_))
|
||||
return 0;
|
||||
PyObject* result = cr(
|
||||
(*pf)(BOOST_PP_REPEAT(N, BOOST_PYTHON_CALL_ARGS, nil))
|
||||
(*pf)(BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_CALL_ARGS, nil))
|
||||
);
|
||||
return policies->postcall(args_, result);
|
||||
}
|
||||
@@ -117,11 +117,11 @@ struct returning<void>
|
||||
, PyObject*, P const* policies)
|
||||
{
|
||||
// check that each of the arguments is convertible
|
||||
BOOST_PP_REPEAT(N, BOOST_PYTHON_CHECK_CONVERSION, nil)
|
||||
BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_CHECK_CONVERSION, nil)
|
||||
|
||||
if (!policies->precall(args_))
|
||||
return 0;
|
||||
(*pf)(BOOST_PP_REPEAT(N, BOOST_PYTHON_CALL_ARGS, nil));
|
||||
(*pf)(BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_CALL_ARGS, nil));
|
||||
return policies->postcall(args_, detail::none());
|
||||
}
|
||||
# endif // returning void / non-void
|
||||
@@ -168,7 +168,7 @@ struct returning<void>
|
||||
return 0;
|
||||
|
||||
// unroll a loop for the rest of them
|
||||
BOOST_PP_REPEAT(N, BOOST_PYTHON_CHECK_CONVERSION, nil)
|
||||
BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_CHECK_CONVERSION, nil)
|
||||
|
||||
// find the result converter
|
||||
typedef typename P::result_converter result_converter;
|
||||
@@ -177,7 +177,7 @@ struct returning<void>
|
||||
return 0;
|
||||
PyObject* result = cr(
|
||||
((ct(PyTuple_GET_ITEM(args_, 0))).*pmf)(
|
||||
BOOST_PP_REPEAT(N, BOOST_PYTHON_CALL_ARGS, nil))
|
||||
BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_CALL_ARGS, nil))
|
||||
);
|
||||
return policies->postcall(args_, result);
|
||||
}
|
||||
@@ -196,13 +196,13 @@ struct returning<void>
|
||||
return 0;
|
||||
|
||||
// unroll a loop for the rest of them
|
||||
BOOST_PP_REPEAT(N, BOOST_PYTHON_CHECK_CONVERSION, nil)
|
||||
BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_CHECK_CONVERSION, nil)
|
||||
|
||||
if (!policies->precall(args_))
|
||||
return 0;
|
||||
|
||||
((ct(PyTuple_GET_ITEM(args_, 0))).*pmf)(
|
||||
BOOST_PP_REPEAT(N, BOOST_PYTHON_CALL_ARGS, nil));
|
||||
BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_CALL_ARGS, nil));
|
||||
return policies->postcall(args_, detail::none());
|
||||
}
|
||||
# endif
|
||||
|
||||
@@ -310,8 +310,8 @@ template <BOOST_PYTHON_TEMPLATE_TYPES>
|
||||
struct init : detail::check_init_params<BOOST_PYTHON_TEMPLATE_ARGS>
|
||||
{
|
||||
typedef boost::mpl::type_list<T0> l0;
|
||||
BOOST_PP_REPEAT
|
||||
(BOOST_PP_DEC(BOOST_PYTHON_MAX_ARITY), BOOST_PYTHON_APPEND_TO_INIT, 0)
|
||||
BOOST_PP_REPEAT_1ST(
|
||||
BOOST_PP_DEC(BOOST_PYTHON_MAX_ARITY), BOOST_PYTHON_APPEND_TO_INIT, 0)
|
||||
|
||||
typedef BOOST_PP_CAT(l, BOOST_PP_DEC(BOOST_PYTHON_MAX_ARITY)) sequence;
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ struct make_holder<N>
|
||||
template <class Holder, class ArgList>
|
||||
struct apply
|
||||
{
|
||||
BOOST_PP_REPEAT(N, BOOST_PYTHON_FORWARD_ARG, nil)
|
||||
BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FORWARD_ARG, nil)
|
||||
static void execute(
|
||||
PyObject* p
|
||||
BOOST_PP_COMMA_IF(N) BOOST_PYTHON_BINARY_ENUM(N, t, a))
|
||||
@@ -66,7 +66,7 @@ struct make_holder<N>
|
||||
void* memory = Holder::allocate(p, offsetof(instance_t, storage), sizeof(Holder));
|
||||
try {
|
||||
(new (memory) Holder(
|
||||
p BOOST_PP_REPEAT(N, BOOST_PYTHON_DO_FORWARD_ARG, nil)))->install(p);
|
||||
p BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_DO_FORWARD_ARG, nil)))->install(p);
|
||||
}
|
||||
catch(...) {
|
||||
Holder::deallocate(p, memory);
|
||||
|
||||
@@ -131,7 +131,7 @@ void* pointer_holder_back_reference<Pointer, Value>::holds(type_info dst_t)
|
||||
# endif
|
||||
pointer_holder(PyObject* BOOST_PP_COMMA_IF(N) BOOST_PYTHON_BINARY_ENUM(N, A, a))
|
||||
: m_p(new Value(
|
||||
BOOST_PP_REPEAT(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil)
|
||||
BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil)
|
||||
))
|
||||
{}
|
||||
|
||||
@@ -149,7 +149,7 @@ void* pointer_holder_back_reference<Pointer, Value>::holds(type_info dst_t)
|
||||
pointer_holder_back_reference(
|
||||
PyObject* p BOOST_PP_COMMA_IF(N) BOOST_PYTHON_BINARY_ENUM(N, A, a))
|
||||
: m_p(new held_type(
|
||||
p BOOST_PP_COMMA_IF(N) BOOST_PP_REPEAT(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil)
|
||||
p BOOST_PP_COMMA_IF(N) BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil)
|
||||
))
|
||||
{}
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ void* value_holder_back_reference<Held,BackReferenceType>::holds(
|
||||
value_holder(
|
||||
PyObject* BOOST_PP_COMMA_IF(N) BOOST_PYTHON_BINARY_ENUM(N, A, a))
|
||||
: m_held(
|
||||
BOOST_PP_REPEAT(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil)
|
||||
BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil)
|
||||
)
|
||||
{}
|
||||
|
||||
@@ -121,7 +121,7 @@ void* value_holder_back_reference<Held,BackReferenceType>::holds(
|
||||
PyObject* p BOOST_PP_COMMA_IF(N) BOOST_PYTHON_BINARY_ENUM(N, A, a))
|
||||
: m_held(
|
||||
p BOOST_PP_COMMA_IF(N)
|
||||
BOOST_PP_REPEAT(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil)
|
||||
BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil)
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user