From e362ad5545ae7adfa4e9280aeb2341843ba491f8 Mon Sep 17 00:00:00 2001 From: Raoul Gough Date: Wed, 10 Sep 2003 11:25:54 +0000 Subject: [PATCH] Support for client-provided call policies using generator function [SVN r1522] --- .../python/suite/indexing/container_suite.hpp | 46 ++++++++++++++----- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/include/boost/python/suite/indexing/container_suite.hpp b/include/boost/python/suite/indexing/container_suite.hpp index 07b081da..e75bffbf 100755 --- a/include/boost/python/suite/indexing/container_suite.hpp +++ b/include/boost/python/suite/indexing/container_suite.hpp @@ -131,32 +131,56 @@ namespace indexing { } }; - template > - struct container_suite - : public boost::python::def_visitor > + template + class container_suite_impl + : public boost::python::def_visitor > { + Policy mPolicy; + + public: typedef typename Traits::algorithms algorithms; typedef typename Traits::reference reference_return; + typedef Policy return_policy; - typedef boost::python::return_value_policy - return_policy; + container_suite_impl (Policy const &policy) : mPolicy (policy) { } template - static void visit (PythonClass &pyClass) + void visit (PythonClass &pyClass) const { maybe_add_getitem - ::apply (pyClass, algorithms(), return_policy()); + ::apply (pyClass, algorithms(), mPolicy); maybe_add_setitem - ::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 - ::apply (pyClass, algorithms(), return_policy()); + ::apply (pyClass, algorithms(), mPolicy); + } + }; + + template > + struct container_suite + { + typedef boost::python::return_value_policy + default_policies; + + static + container_suite_impl + generate () + { + return container_suite_impl (default_policies()); + } + + template + static + container_suite_impl + generate (Policy const &policy) + { + return container_suite_impl (policy); } }; }