use crate::{IntoValues, Values};
impl<'a, V: Clone + 'a> Iterator for Values<'a, V> {
type Item = &'a V;
#[inline]
#[must_use]
fn next(&mut self) -> Option<Self::Item> {
while self.pos < self.max {
let opt = unsafe { &*self.head.add(self.pos) };
self.pos += 1;
if opt.is_some() {
return opt.as_ref();
}
}
None
}
}
impl<V: Copy> Iterator for IntoValues<V> {
type Item = V;
#[inline]
#[must_use]
fn next(&mut self) -> Option<Self::Item> {
while self.pos < self.max {
let opt = unsafe { &*self.head.add(self.pos) };
self.pos += 1;
if opt.is_some() {
return *opt;
}
}
None
}
}
#[cfg(test)]
use crate::Map;
#[test]
fn empty_values() {
let m: Map<u32> = Map::with_capacity_none(16);
assert!(m.values().next().is_none());
}
#[test]
fn insert_and_jump_over_next() {
let mut m: Map<&str> = Map::with_capacity_none(16);
m.insert(0, "foo");
let mut values = m.into_values();
assert_eq!("foo", values.next().unwrap());
assert!(values.next().is_none());
}
#[test]
fn count_them_all() {
let mut m: Map<&str> = Map::with_capacity_none(16);
m.insert(0, "one");
m.insert(1, "two");
m.insert(2, "three");
assert_eq!(3, m.into_values().count());
}