refactor: access upstream count in UpstreamSnapshot
Adds a method to return the number of upstreams in an UpstreamSnapshot.pull/24376/head
parent
08ef689d21
commit
d4486bef3e
|
@ -43,6 +43,14 @@ impl<'a, C> UpstreamSnapshot<'a, C> {
|
||||||
self.idx = self.idx.wrapping_sub(1);
|
self.idx = self.idx.wrapping_sub(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the number of clients in this [`UpstreamSnapshot`].
|
||||||
|
///
|
||||||
|
/// This value decreases as upstreams are removed by calls to
|
||||||
|
/// [`UpstreamSnapshot::remove_last_unstable()`].
|
||||||
|
pub(super) fn len(&self) -> usize {
|
||||||
|
self.clients.len()
|
||||||
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn idx(&self) -> usize {
|
fn idx(&self) -> usize {
|
||||||
self.idx % self.clients.len()
|
self.idx % self.clients.len()
|
||||||
|
@ -61,7 +69,7 @@ impl<'a, C> Iterator for UpstreamSnapshot<'a, C> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn size_hint(&self) -> (usize, Option<usize>) {
|
fn size_hint(&self) -> (usize, Option<usize>) {
|
||||||
(0, Some(self.clients.len()))
|
(0, Some(self.len()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,6 +89,8 @@ mod tests {
|
||||||
|
|
||||||
let mut snap = UpstreamSnapshot::new(elements.iter(), 0);
|
let mut snap = UpstreamSnapshot::new(elements.iter(), 0);
|
||||||
|
|
||||||
|
assert_eq!(snap.len(), 3);
|
||||||
|
|
||||||
let (min, max) = snap.size_hint();
|
let (min, max) = snap.size_hint();
|
||||||
assert_eq!(min, 0);
|
assert_eq!(min, 0);
|
||||||
assert_eq!(max, Some(3));
|
assert_eq!(max, Some(3));
|
||||||
|
@ -90,6 +100,7 @@ mod tests {
|
||||||
let (min, max) = snap.size_hint();
|
let (min, max) = snap.size_hint();
|
||||||
assert_eq!(min, 0);
|
assert_eq!(min, 0);
|
||||||
assert_eq!(max, Some(2));
|
assert_eq!(max, Some(2));
|
||||||
|
assert_eq!(snap.len(), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -187,13 +198,18 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_remove_last_element() {
|
fn test_remove_all_elements() {
|
||||||
let elements = [42];
|
let elements = [42];
|
||||||
let mut snap = UpstreamSnapshot::new(elements.iter(), 0);
|
let mut snap = UpstreamSnapshot::new(elements.iter(), 0);
|
||||||
|
|
||||||
|
assert_eq!(snap.len(), 1);
|
||||||
|
|
||||||
assert_eq!(snap.next(), Some(&42));
|
assert_eq!(snap.next(), Some(&42));
|
||||||
assert_eq!(snap.next(), Some(&42));
|
assert_eq!(snap.next(), Some(&42));
|
||||||
snap.remove_last_unstable();
|
snap.remove_last_unstable();
|
||||||
assert_eq!(snap.next(), None);
|
assert_eq!(snap.next(), None);
|
||||||
assert_eq!(snap.next(), None);
|
assert_eq!(snap.next(), None);
|
||||||
|
|
||||||
|
assert_eq!(snap.len(), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue