| 503 | // are not covered by the much simpler py::make_iterator |
| 504 | |
| 505 | struct PySequenceIterator { |
| 506 | PySequenceIterator(const Sequence &seq, py::object ref) : seq(seq), ref(ref) { } |
| 507 | |
| 508 | float next() { |
| 509 | if (index == seq.size()) |
| 510 | throw py::stop_iteration(); |
| 511 | return seq[index++]; |
| 512 | } |
| 513 | |
| 514 | const Sequence &seq; |
| 515 | py::object ref; // keep a reference |
| 516 | size_t index = 0; |
| 517 | }; |
| 518 | |
| 519 | py::class_<PySequenceIterator>(seq, "Iterator") |
| 520 | .def("__iter__", [](PySequenceIterator &it) -> PySequenceIterator& { return it; }) |
no outgoing calls