2
0
mirror of https://github.com/boostorg/python.git synced 2026-01-20 04:42:28 +00:00

Support for client-provided call policies using generator function

[SVN r1522]
This commit is contained in:
Raoul Gough
2003-09-10 11:25:54 +00:00
parent 5f3579bc04
commit e362ad5545

View File

@@ -131,32 +131,56 @@ namespace indexing {
}
};
template<class Container
, class Traits = container_traits<Container> >
struct container_suite
: public boost::python::def_visitor<container_suite<Container, Traits> >
template<class Container, class Policy, class Traits>
class container_suite_impl
: public boost::python::def_visitor <container_suite_impl<Container, Policy, Traits> >
{
Policy mPolicy;
public:
typedef typename Traits::algorithms algorithms;
typedef typename Traits::reference reference_return;
typedef Policy return_policy;
typedef boost::python::return_value_policy<boost::python::return_by_value>
return_policy;
container_suite_impl (Policy const &policy) : mPolicy (policy) { }
template <class PythonClass>
static void visit (PythonClass &pyClass)
void visit (PythonClass &pyClass) const
{
maybe_add_getitem<Traits::index_style>
::apply (pyClass, algorithms(), return_policy());
::apply (pyClass, algorithms(), mPolicy);
maybe_add_setitem<Traits::index_style>
::apply (pyClass, algorithms(), return_policy());
::apply (pyClass, algorithms(), mPolicy);
maybe_add_iter<((Traits::index_style != index_style_linear)
&& Traits::has_copyable_iter)>
::apply (pyClass, algorithms(), return_policy());
::apply (pyClass, algorithms(), mPolicy);
maybe_add_append<Traits::has_push_back>
::apply (pyClass, algorithms(), return_policy());
::apply (pyClass, algorithms(), mPolicy);
}
};
template<class Container, class Traits = container_traits<Container> >
struct container_suite
{
typedef boost::python::return_value_policy<boost::python::return_by_value>
default_policies;
static
container_suite_impl <Container, default_policies, Traits>
generate ()
{
return container_suite_impl <Container, default_policies, Traits> (default_policies());
}
template<typename Policy>
static
container_suite_impl <Container, Policy, Traits>
generate (Policy const &policy)
{
return container_suite_impl <Container, Policy, Traits> (policy);
}
};
}