From 1affd5eae710589273c2b51d033a5cb025230b72 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Tue, 28 Aug 2018 20:19:01 -0700 Subject: [PATCH] Add Deref and DerefMut implementations for PrimaryMap. --- lib/entity/src/primary.rs | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) 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; + } }