diff --git a/src/python/corrade/containers.cpp b/src/python/corrade/containers.cpp index 40228bc..ebb51c5 100644 --- a/src/python/corrade/containers.cpp +++ b/src/python/corrade/containers.cpp @@ -183,17 +183,6 @@ template void arrayView(py::class_, Containers enableBetterBufferProtocol, arrayViewBufferProtocol>(c); } -template void mutableArrayView(py::class_, Containers::PyArrayViewHolder>>& c) { - c - .def("__setitem__", [](const Containers::ArrayView& self, std::size_t i, const T& value) { - if(i >= self.size()) { - PyErr_SetNone(PyExc_IndexError); - throw py::error_already_set{}; - } - self[i] = value; - }, "Set a value at given position", py::arg("i"), py::arg("value")); -} - template void bitArrayView(py::class_, Containers::PyArrayViewHolder>>& c) { c /* Constructor */ @@ -234,17 +223,6 @@ template void bitArrayView(py::class_, }, "Slice the view", py::arg("slice")); } -template void mutableBitArrayView(py::class_, Containers::PyArrayViewHolder>>& c) { - c - .def("__setitem__", [](const Containers::BasicBitArrayView& self, std::size_t i, bool value) { - if(i >= self.size()) { - PyErr_SetNone(PyExc_IndexError); - throw py::error_already_set{}; - } - self.set(i, value); - }, "Set a bit at given position", py::arg("i"), py::arg("value")); -} - /* Tuple for given dimension */ template struct DimensionsTuple; template struct DimensionsTuple<1, T> { typedef std::tuple Type; }; @@ -646,17 +624,6 @@ template void stridedArrayViewND(py::class_, Containers::PyArrayViewHolder>>& c) { - c - .def("__setitem__", [](const Containers::PyStridedArrayView<1, char>& self, const std::size_t i, py::handle value) { - if(i >= self.size()) { - PyErr_SetNone(PyExc_IndexError); - throw py::error_already_set{}; - } - self.setitem(&self[i], value); - }, "Set a value at given position", py::arg("i"), py::arg("value")); -} - template void mutableStridedArrayViewND(py::class_, Containers::PyArrayViewHolder>>& c) { c .def("__setitem__", [](const Containers::PyStridedArrayView& self, const typename DimensionsTuple::Type& iTuple, py::handle value) { @@ -766,17 +733,6 @@ template void stridedBitArrayViewND(py::class_, Containers::PyArrayViewHolder>>& c) { - c - .def("__setitem__", [](const Containers::BasicStridedBitArrayView<1, char>& self, const std::size_t i, bool value) { - if(i >= self.size()) { - PyErr_SetNone(PyExc_IndexError); - throw py::error_already_set{}; - } - self.set(i, value); - }, "Set a bit at given position", py::arg("i"), py::arg("value")); -} - template void mutableStridedBitArrayViewND(py::class_, Containers::PyArrayViewHolder>>& c) { c .def("__setitem__", [](const Containers::BasicStridedBitArrayView& self, const typename DimensionsTuple::Type& iTuple, bool value) { @@ -854,7 +810,14 @@ void containers(py::module_& m) { py::class_, Containers::PyArrayViewHolder>> mutableArrayView_{m, "MutableArrayView", "Mutable array view", py::buffer_protocol{}}; arrayView(mutableArrayView_); - mutableArrayView(mutableArrayView_); + mutableArrayView_ + .def("__setitem__", [](const Containers::ArrayView& self, std::size_t i, const char& value) { + if(i >= self.size()) { + PyErr_SetNone(PyExc_IndexError); + throw py::error_already_set{}; + } + self[i] = value; + }, "Set a value at given position", py::arg("i"), py::arg("value")); py::class_> bitArrayView_{m, "BitArrayView", "Bit array view"}; @@ -863,7 +826,14 @@ void containers(py::module_& m) { py::class_> mutableBitArrayView_{m, "MutableBitArrayView", "Mutable bit array view"}; bitArrayView(mutableBitArrayView_); - mutableBitArrayView(mutableBitArrayView_); + mutableBitArrayView_ + .def("__setitem__", [](const Containers::MutableBitArrayView& self, std::size_t i, bool value) { + if(i >= self.size()) { + PyErr_SetNone(PyExc_IndexError); + throw py::error_already_set{}; + } + self.set(i, value); + }, "Set a bit at given position", py::arg("i"), py::arg("value")); /* These have to be defined before StridedArrayView types in order to have them ready for the return type of sliceBit() */ @@ -904,7 +874,14 @@ void containers(py::module_& m) { stridedBitArrayViewND(mutableStridedBitArrayView3D_); stridedBitArrayView(mutableStridedBitArrayView4D_); stridedBitArrayViewND(mutableStridedBitArrayView4D_); - mutableStridedBitArrayView1D(mutableStridedBitArrayView1D_); + mutableStridedBitArrayView1D_ + .def("__setitem__", [](const Containers::BasicStridedBitArrayView<1, char>& self, const std::size_t i, bool value) { + if(i >= self.size()) { + PyErr_SetNone(PyExc_IndexError); + throw py::error_already_set{}; + } + self.set(i, value); + }, "Set a bit at given position", py::arg("i"), py::arg("value")); mutableStridedBitArrayViewND(mutableStridedBitArrayView2D_); mutableStridedBitArrayViewND(mutableStridedBitArrayView3D_); mutableStridedBitArrayViewND(mutableStridedBitArrayView4D_); @@ -942,7 +919,14 @@ void containers(py::module_& m) { stridedArrayViewND(mutableStridedArrayView3D_); stridedArrayView(mutableStridedArrayView4D_); stridedArrayViewND(mutableStridedArrayView4D_); - mutableStridedArrayView1D(mutableStridedArrayView1D_); + mutableStridedArrayView1D_ + .def("__setitem__", [](const Containers::PyStridedArrayView<1, char>& self, const std::size_t i, py::handle value) { + if(i >= self.size()) { + PyErr_SetNone(PyExc_IndexError); + throw py::error_already_set{}; + } + self.setitem(&self[i], value); + }, "Set a value at given position", py::arg("i"), py::arg("value")); mutableStridedArrayViewND(mutableStridedArrayView2D_); mutableStridedArrayViewND(mutableStridedArrayView3D_); mutableStridedArrayViewND(mutableStridedArrayView4D_);