aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alessandro Ghedini <alessandro@ghedini.me> 2023-06-19 14:52:41 +0100
committerGravatar Alessandro Ghedini <alessandro@ghedini.me> 2023-06-19 15:50:21 +0100
commitb70f728a9acda3c4690b5792593ed12c05a99ca7 (patch)
tree56ad5299aa844dd8c8abc7b002455d1611a510ce
parentc18e4f66cde49d2dbb0abfa71706b8197e837a8a (diff)
downloadquiche-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.rs2
-rw-r--r--quiche/src/path.rs11
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
}
}