diff options
Diffstat (limited to 'ecs/src/util')
-rw-r--r-- | ecs/src/util/array_vec.rs | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/ecs/src/util/array_vec.rs b/ecs/src/util/array_vec.rs index 648c976..13a0349 100644 --- a/ecs/src/util/array_vec.rs +++ b/ecs/src/util/array_vec.rs @@ -1,4 +1,4 @@ -use std::mem::{transmute, MaybeUninit}; +use std::mem::MaybeUninit; use std::ops::{Deref, DerefMut}; #[derive(Debug)] @@ -10,16 +10,18 @@ pub struct ArrayVec<Item, const CAPACITY: usize> impl<Item, const CAPACITY: usize> ArrayVec<Item, CAPACITY> { - pub fn new() -> Self + #[inline] + #[must_use] + pub fn len(&self) -> usize { - Self::default() + self.len } #[inline] #[must_use] - pub fn len(&self) -> usize + pub fn is_empty(&self) -> bool { - self.len + self.len == 0 } pub fn push(&mut self, item: Item) @@ -69,7 +71,9 @@ impl<Item, const CAPACITY: usize> AsRef<[Item]> for ArrayVec<Item, CAPACITY> { fn as_ref(&self) -> &[Item] { - unsafe { transmute::<&[MaybeUninit<Item>], &[Item]>(&self.items[..self.len]) } + let ptr = &raw const self.items[..self.len]; + + unsafe { &*(ptr as *const [Item]) } } } @@ -77,11 +81,9 @@ impl<Item, const CAPACITY: usize> AsMut<[Item]> for ArrayVec<Item, CAPACITY> { fn as_mut(&mut self) -> &mut [Item] { - unsafe { - transmute::<&mut [MaybeUninit<Item>], &mut [Item]>( - &mut self.items[..self.len], - ) - } + let ptr = &raw mut self.items[..self.len]; + + unsafe { &mut *(ptr as *mut [Item]) } } } |