@@ -86,8 +86,8 @@ struct overload_base_get_item_for_std_vector
8686 void visit (Class &cl) const {
8787 cl.def (" __getitem__" , &base_get_item_int)
8888 .def (" __getitem__" , &base_get_item_slice)
89- .def (" __getitem__" , &base_get_item_list )
90- .def (" __getitem__" , &base_get_item_tuple );
89+ .def (" __getitem__" , &base_get_item_list_or_tuple<bp::list> )
90+ .def (" __getitem__" , &base_get_item_list_or_tuple<bp::tuple> );
9191 }
9292
9393 private:
@@ -132,25 +132,9 @@ struct overload_base_get_item_for_std_vector
132132 return out;
133133 }
134134
135- static bp::object base_get_item_list (bp::back_reference<Container &> c,
136- bp::list idxs) {
137- const Py_ssize_t m = bp::len (idxs);
138- bp::list out;
139- for (Py_ssize_t k = 0 ; k < m; ++k) {
140- bp::object obj = idxs[k];
141- bp::extract<long > ei (obj);
142- if (!ei.check ()) {
143- PyErr_SetString (PyExc_TypeError, " indices must be integers" );
144- bp::throw_error_already_set ();
145- }
146- auto idx = normalize_index (c.get ().size (), ei ());
147- out.append (elem_ref (c.get (), idx));
148- }
149- return out;
150- }
151- 152- static bp::object base_get_item_tuple (bp::back_reference<Container &> c,
153- bp::tuple idxs) {
135+ template <typename list_or_tuple>
136+ static bp::object base_get_item_list_or_tuple (
137+ bp::back_reference<Container &> c, list_or_tuple idxs) {
154138 const Py_ssize_t m = bp::len (idxs);
155139 bp::list out;
156140 for (Py_ssize_t k = 0 ; k < m; ++k) {
0 commit comments