Add Deref and DerefMut implementations for PrimaryMap.

This commit is contained in:
Dan Gohman
2018-08-28 20:19:01 -07:00
parent f834afb5f6
commit 1affd5eae7

View File

@@ -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<K, V> Deref for PrimaryMap<K, V>
where
K: EntityRef,
{
type Target = [V];
fn deref(&self) -> &Self::Target {
&self.elems
}
}
impl<K, V> DerefMut for PrimaryMap<K, V>
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::<E, isize>::new();
let _: &[isize] = m.as_ref();
let _: &mut [isize] = m.as_mut();
let _: &[isize] = &m;
let _: &mut [isize] = &mut m;
}
}