Skip to content

Commit dd00986

Browse files
committed
container/vector: reduce code redudancy
1 parent 67d2ad0 commit dd00986

File tree

1 file changed

+5
-21
lines changed

1 file changed

+5
-21
lines changed

include/eigenpy/std-vector.hpp

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)