diff --git a/lib/entity/src/primary.rs b/lib/entity/src/primary.rs index 07e00cb884..d071373180 100644 --- a/lib/entity/src/primary.rs +++ b/lib/entity/src/primary.rs @@ -1,6 +1,6 @@ //! Densely numbered entity references as mapping keys. use std::marker::PhantomData; -use std::ops::{Index, IndexMut}; +use std::ops::{Deref, DerefMut, Index, IndexMut}; use std::slice; use std::vec::Vec; use {EntityRef, Iter, IterMut, Keys}; @@ -145,6 +145,26 @@ where } } +impl Deref for PrimaryMap +where + K: EntityRef, +{ + type Target = [V]; + + fn deref(&self) -> &Self::Target { + &self.elems + } +} + +impl DerefMut for PrimaryMap +where + K: EntityRef, +{ + fn deref_mut(&mut self) -> &mut [V] { + &mut self.elems + } +} + #[cfg(test)] mod tests { use super::*; @@ -322,4 +342,12 @@ mod tests { } } + #[test] + fn deref() { + let mut m = PrimaryMap::::new(); + let _: &[isize] = m.as_ref(); + let _: &mut [isize] = m.as_mut(); + let _: &[isize] = &m; + let _: &mut [isize] = &mut m; + } }