diff --git a/include/boost/python/suite/indexing/container_suite.hpp b/include/boost/python/suite/indexing/container_suite.hpp index 517692a2..c8a301a2 100755 --- a/include/boost/python/suite/indexing/container_suite.hpp +++ b/include/boost/python/suite/indexing/container_suite.hpp @@ -25,163 +25,28 @@ #ifndef container_suite_rmg_20030823_included #define container_suite_rmg_20030823_included -#include "container_traits.hpp" -#include "slice_handler.hpp" +#include "algo_selector.hpp" +#include "visitor.hpp" #include #include -#include -#include - -// #include namespace indexing { - template - struct maybe_add_getitem { - template - static void apply (PythonClass &, Algorithms const &, Policy const &) { } - }; - - template<> - struct maybe_add_getitem { - template - static void apply (PythonClass &pyClass - , Algorithms const & - , Policy const &policy) - { - pyClass.def ("__getitem__", &Algorithms::get, policy); - } - }; - - template<> - struct maybe_add_getitem { - template - static void apply (PythonClass &pyClass - , Algorithms const & - , Policy const &policy) - { - pyClass.def ("__getitem__", &Algorithms::get, policy); - pyClass.def ("__getitem__" - , slice_handler::make_getitem (policy)); - } - }; - - template - struct maybe_add_setitem { - template - static void apply (PythonClass &, Algorithms const &, Policy const &) { } - }; - - template<> - struct maybe_add_setitem { - template - static void apply (PythonClass &pyClass - , Algorithms const & - , Policy const &policy) - { - pyClass.def ("__setitem__", &Algorithms::assign, policy); - } - }; - - template<> - struct maybe_add_setitem { - template - static void apply (PythonClass &pyClass - , Algorithms const & - , Policy const &policy) - { - pyClass.def ("__setitem__", &Algorithms::assign, policy); - pyClass.def ("__setitem__" - , slice_handler::make_setitem (policy)); - } - }; - - template - struct maybe_add_iter { - template - static void apply (PythonClass &, Algorithms const &, Policy const &) { } - }; - - template<> - struct maybe_add_iter { - template - static void apply (PythonClass &pyClass - , Algorithms const & - , Policy const &policy) - { - pyClass.def ("__iter__" - , boost::python::range (Algorithms::begin - , Algorithms::end)); - } - }; - - template - struct maybe_add_append { - template - static void apply (PythonClass &, Algorithms const &, Policy const &) { } - }; - - template<> - struct maybe_add_append { - template - static void apply (PythonClass &pyClass - , Algorithms const & - , Policy const &policy) - { - pyClass.def ("append", &Algorithms::push_back, policy); - } - }; - - 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; - - container_suite_impl (Policy const &policy) : mPolicy (policy) { } - - template - void visit (PythonClass &pyClass) const - { - maybe_add_getitem - ::apply (pyClass, algorithms(), mPolicy); - - maybe_add_setitem - ::apply (pyClass, algorithms(), mPolicy); - - maybe_add_iter<((Traits::index_style != index_style_linear) - && Traits::has_copyable_iter)> - ::apply (pyClass, algorithms(), mPolicy); - - maybe_add_append - ::apply (pyClass, algorithms(), mPolicy); - } - }; - - template > + template > struct container_suite { typedef boost::python::return_value_policy default_policies; - static - container_suite_impl - generate () + static visitor generate () { - return container_suite_impl (default_policies()); + return visitor (default_policies()); } template - static - container_suite_impl - generate (Policy const &policy) + static visitor generate (Policy const &policy) { - return container_suite_impl (policy); + return visitor (policy); } }; }