use super::{SliceMap, TypedIndex}; use std::{ marker::PhantomData, mem, ops::{Deref, DerefMut}, }; #[derive(Debug, Clone)] pub struct BoxedMap where K: TypedIndex, { elems: Box<[V]>, _marker: PhantomData, } impl BoxedMap where K: TypedIndex, { pub(in crate::structures) fn new(elems: Box<[V]>) -> Self { Self { elems, _marker: PhantomData, } } } impl Deref for BoxedMap where K: TypedIndex, { type Target = SliceMap; fn deref(&self) -> &SliceMap { unsafe { mem::transmute::<&[V], _>(&*self.elems) } } } impl DerefMut for BoxedMap where K: TypedIndex, { fn deref_mut(&mut self) -> &mut SliceMap { unsafe { mem::transmute::<&mut [V], _>(&mut *self.elems) } } }