From 9a92993d34a0d8ef7094edfdb0dc0ad456611b2e Mon Sep 17 00:00:00 2001 From: Bas Schoenmaeckers Date: Wed, 29 Jan 2025 10:16:08 +0100 Subject: [PATCH] Optimize `Iterator:last()` for `PyList` & `PyTuple` --- newsfragments/4878.added.md | 1 + src/types/list.rs | 8 ++++++++ src/types/tuple.rs | 16 ++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 newsfragments/4878.added.md diff --git a/newsfragments/4878.added.md b/newsfragments/4878.added.md new file mode 100644 index 00000000000..040c6d860e5 --- /dev/null +++ b/newsfragments/4878.added.md @@ -0,0 +1 @@ +Optimizes `last` for `BoundListIterator`, `BoundTupleIterator` and `BorrowedTupleIterator` \ No newline at end of file diff --git a/src/types/list.rs b/src/types/list.rs index 76da36d00b9..7601f25f09a 100644 --- a/src/types/list.rs +++ b/src/types/list.rs @@ -750,6 +750,14 @@ impl<'py> Iterator for BoundListIterator<'py> { None }) } + + #[inline] + fn last(mut self) -> Option + where + Self: Sized + { + self.next_back() + } } impl DoubleEndedIterator for BoundListIterator<'_> { diff --git a/src/types/tuple.rs b/src/types/tuple.rs index 8147b872af5..1121ab662ff 100644 --- a/src/types/tuple.rs +++ b/src/types/tuple.rs @@ -375,6 +375,14 @@ impl<'py> Iterator for BoundTupleIterator<'py> { let len = self.len(); (len, Some(len)) } + + #[inline] + fn last(mut self) -> Option + where + Self: Sized + { + self.next_back() + } } impl DoubleEndedIterator for BoundTupleIterator<'_> { @@ -467,6 +475,14 @@ impl<'a, 'py> Iterator for BorrowedTupleIterator<'a, 'py> { let len = self.len(); (len, Some(len)) } + + #[inline] + fn last(mut self) -> Option + where + Self: Sized + { + self.next_back() + } } impl DoubleEndedIterator for BorrowedTupleIterator<'_, '_> {