From 0f78c5e4471d2fa2dcae47421404c859b0cbf398 Mon Sep 17 00:00:00 2001 From: Sean McArthur Date: Thu, 30 May 2019 12:12:46 -0700 Subject: [PATCH] implement FusedIterator for all HeaderMap iterators Increases minium Rust version to 1.26, when FusedIterator was stabilized. --- .travis.yml | 2 +- src/header/map.rs | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 053ba1f5..0a037eeb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,7 +14,7 @@ matrix: - rustup target add wasm32-unknown-unknown - cargo build --target=wasm32-unknown-unknown # minimum rustc version - - rust: 1.20.0 + - rust: 1.26.0 script: cargo build script: diff --git a/src/header/map.rs b/src/header/map.rs index 66f987cc..8f937499 100644 --- a/src/header/map.rs +++ b/src/header/map.rs @@ -4,7 +4,7 @@ use super::name::{HeaderName, HdrName, InvalidHeaderName}; use std::{fmt, mem, ops, ptr, vec}; use std::collections::hash_map::RandomState; use std::hash::{BuildHasher, Hasher, Hash}; -use std::iter::FromIterator; +use std::iter::{FromIterator, FusedIterator}; use std::marker::PhantomData; pub use self::as_header_name::AsHeaderName; @@ -1949,6 +1949,8 @@ impl<'a, T> Iterator for Iter<'a, T> { } } +impl<'a, T> FusedIterator for Iter<'a, T> {} + unsafe impl<'a, T: Sync> Sync for Iter<'a, T> {} unsafe impl<'a, T: Sync> Send for Iter<'a, T> {} @@ -2010,6 +2012,8 @@ impl<'a, T> Iterator for IterMut<'a, T> { } } +impl<'a, T> FusedIterator for IterMut<'a, T> {} + unsafe impl<'a, T: Sync> Sync for IterMut<'a, T> {} unsafe impl<'a, T: Send> Send for IterMut<'a, T> {} @@ -2028,6 +2032,7 @@ impl<'a, T> Iterator for Keys<'a, T> { } impl<'a, T> ExactSizeIterator for Keys<'a, T> {} +impl<'a, T> FusedIterator for Keys<'a, T> {} // ===== impl Values ==== @@ -2043,6 +2048,8 @@ impl<'a, T> Iterator for Values<'a, T> { } } +impl<'a, T> FusedIterator for Values<'a, T> {} + // ===== impl ValuesMut ==== impl<'a, T> Iterator for ValuesMut<'a, T> { @@ -2057,6 +2064,8 @@ impl<'a, T> Iterator for ValuesMut<'a, T> { } } +impl<'a, T> FusedIterator for ValuesMut<'a, T> {} + // ===== impl Drain ===== impl<'a, T> Iterator for Drain<'a, T> { @@ -2100,6 +2109,8 @@ impl<'a, T> Iterator for Drain<'a, T> { } } +impl<'a, T> FusedIterator for Drain<'a, T> {} + impl<'a, T> Drop for Drain<'a, T> { fn drop(&mut self) { unsafe { @@ -2460,6 +2471,8 @@ impl<'a, T: 'a> DoubleEndedIterator for ValueIter<'a, T> { } } +impl<'a, T> FusedIterator for ValueIter<'a, T> {} + // ===== impl ValueIterMut ===== impl<'a, T: 'a> Iterator for ValueIterMut<'a, T> { @@ -2539,6 +2552,8 @@ impl<'a, T: 'a> DoubleEndedIterator for ValueIterMut<'a, T> { } } +impl<'a, T> FusedIterator for ValueIterMut<'a, T> {} + unsafe impl<'a, T: Sync> Sync for ValueIterMut<'a, T> {} unsafe impl<'a, T: Send> Send for ValueIterMut<'a, T> {} @@ -2579,6 +2594,8 @@ impl Iterator for IntoIter { } } +impl FusedIterator for IntoIter {} + impl Drop for IntoIter { fn drop(&mut self) { // Ensure the iterator is consumed @@ -2946,6 +2963,8 @@ impl<'a, T> Iterator for ValueDrain<'a, T> { } } +impl<'a, T> FusedIterator for ValueDrain<'a, T> {} + impl<'a, T> Drop for ValueDrain<'a, T> { fn drop(&mut self) { while let Some(_) = self.next() {