aboutsummaryrefslogtreecommitdiff
path: root/quiche/src/path.rs
diff options
context:
space:
mode:
Diffstat (limited to 'quiche/src/path.rs')
-rw-r--r--quiche/src/path.rs11
1 files changed, 8 insertions, 3 deletions
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
}
}