Complete the iterator interface: error handling and STL algorithms #662
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR fills in some of the missing bits in
py::iterator
:PyObject_GetIter
andPyIter_Next
errors are now being handled properly.py::iterator
so that it can use used with<algorithm>
. It models anInputIterator
(std::input_iterator_tag
) which is perfectly in line with the restrictions ofpy::iterator
: copying doesn't clone the internal state, i.e. no multipass guarantee.py::iterator
works for anypy::object
, but the sequence types can get specialized implementations which are simultaneously slimmer and more capable:py::tuple
,py::list
get aPySequence_Fast
iterator.py::sequence
gets a slower but more generic sequence iterator.RandomAccessIterator
and are STL-compatible.py::dict
already had a specialized iterator. This PR just folds it in with the others. It models aForwardIterator
(input + multipass).