diff options
author | 2023-06-19 14:52:41 +0100 | |
---|---|---|
committer | 2023-06-19 15:50:21 +0100 | |
commit | b70f728a9acda3c4690b5792593ed12c05a99ca7 (patch) | |
tree | 56ad5299aa844dd8c8abc7b002455d1611a510ce | |
parent | c18e4f66cde49d2dbb0abfa71706b8197e837a8a (diff) | |
download | quiche-b70f728a9acda3c4690b5792593ed12c05a99ca7.tar.gz quiche-b70f728a9acda3c4690b5792593ed12c05a99ca7.tar.zst quiche-b70f728a9acda3c4690b5792593ed12c05a99ca7.zip |
path: progress through SocketAddrIter from front to back
Also use smallvec. Similar to 0f22ab5f.
-rw-r--r-- | quiche/src/lib.rs | 2 | ||||
-rw-r--r-- | quiche/src/path.rs | 11 |
2 files changed, 10 insertions, 3 deletions
diff --git a/quiche/src/lib.rs b/quiche/src/lib.rs index 51ad769c..0f127e92 100644 --- a/quiche/src/lib.rs +++ b/quiche/src/lib.rs @@ -5897,6 +5897,8 @@ impl Connection { .filter(|(_, p)| p.local_addr() == from) .map(|(_, p)| p.peer_addr()) .collect(), + + index: 0, } } diff --git a/quiche/src/path.rs b/quiche/src/path.rs index d1ab0e9a..395f5b30 100644 --- a/quiche/src/path.rs +++ b/quiche/src/path.rs @@ -30,6 +30,8 @@ use std::collections::BTreeMap; use std::collections::VecDeque; use std::net::SocketAddr; +use smallvec::SmallVec; + use slab::Slab; use crate::Error; @@ -467,7 +469,8 @@ impl Path { /// An iterator over SocketAddr. #[derive(Default)] pub struct SocketAddrIter { - pub(crate) sockaddrs: Vec<SocketAddr>, + pub(crate) sockaddrs: SmallVec<[SocketAddr; 8]>, + pub(crate) index: usize, } impl Iterator for SocketAddrIter { @@ -475,14 +478,16 @@ impl Iterator for SocketAddrIter { #[inline] fn next(&mut self) -> Option<Self::Item> { - self.sockaddrs.pop() + let v = self.sockaddrs.get(self.index)?; + self.index += 1; + Some(*v) } } impl ExactSizeIterator for SocketAddrIter { #[inline] fn len(&self) -> usize { - self.sockaddrs.len() + self.sockaddrs.len() - self.index } } |