bytes: impl for Vec<T>

This commit is contained in:
Carter Anderson 2020-06-03 11:12:39 -07:00
parent 97142a68d1
commit d65a2c783d

View File

@ -43,7 +43,7 @@ where
} }
} }
unsafe impl<T> Byteable for [T] where Self: Sized {} unsafe impl<T> Byteable for [T] where Self: Sized, T: Byteable {}
unsafe impl<T> Byteable for [T; 2] where T: Byteable {} unsafe impl<T> Byteable for [T; 2] where T: Byteable {}
unsafe impl<T> Byteable for [T; 3] where T: Byteable {} unsafe impl<T> Byteable for [T; 3] where T: Byteable {}
unsafe impl<T> Byteable for [T; 4] where T: Byteable {} unsafe impl<T> Byteable for [T; 4] where T: Byteable {}
@ -78,7 +78,8 @@ impl Bytes for Vec3 {
array.write_bytes(buffer); array.write_bytes(buffer);
} }
fn byte_len(&self) -> usize { fn byte_len(&self) -> usize {
std::mem::size_of::<Self>() // cant use self here because Vec3 is a simd type / technically a vec4
std::mem::size_of::<[f32;3]>()
} }
} }
@ -115,3 +116,16 @@ where
self.as_ref().map_or(0, |val| val.byte_len()) self.as_ref().map_or(0, |val| val.byte_len())
} }
} }
impl<T> Bytes for Vec<T>
where
T: Sized + Byteable,
{
fn write_bytes(&self, buffer: &mut [u8]) {
let bytes = self.as_slice().as_bytes();
buffer[0..self.byte_len()].copy_from_slice(bytes)
}
fn byte_len(&self) -> usize {
self.as_slice().as_bytes().len()
}
}