diff --git a/lib/entity/src/primary.rs b/lib/entity/src/primary.rs index 9b87098239..ae1097f6aa 100644 --- a/lib/entity/src/primary.rs +++ b/lib/entity/src/primary.rs @@ -1,4 +1,5 @@ //! Densely numbered entity references as mapping keys. +use std::iter::FromIterator; use std::marker::PhantomData; use std::ops::{Index, IndexMut}; use std::slice; @@ -170,6 +171,21 @@ where } } +impl FromIterator for PrimaryMap +where + K: EntityRef, +{ + fn from_iter(iter: T) -> Self + where + T: IntoIterator, + { + Self { + elems: Vec::from_iter(iter), + unused: PhantomData, + } + } +} + #[cfg(test)] mod tests { use super::*; @@ -346,4 +362,15 @@ mod tests { } } } + + fn from_iter() { + let mut m: PrimaryMap = PrimaryMap::new(); + m.push(12); + m.push(33); + let n = m.values().collect::>(); + assert!(m.len() == n.len()); + for (me, ne) in m.values().zip(n.values()) { + assert!(*me == **ne); + } + } }