#[repr(C)]
#[derive(Debug, Clone, PartialEq)]
pub struct Vec4<T> {
pub x: T,
pub y: T,
pub z: T,
pub w: T
}
impl <T> Vec4 <T> {
pub fn new(x: T, y: T, z: T, w: T) -> Self {
Self { x, y, z, w }
}
pub fn as_ptr(&self) -> *const T {
self as *const _ as *const T
}
pub fn as_mut_ptr(&mut self) -> *mut T {
self as *mut _ as *mut T
}
pub fn as_slice(&self) -> &[T] {
unsafe { std::slice::from_raw_parts(self.as_ptr(), 4) }
}
pub fn as_mut_slice(&mut self) -> &mut [T] {
unsafe { std::slice::from_raw_parts_mut(self.as_mut_ptr(), 4) }
}
}
impl <T> Vec4<T> where T: Clone {
pub fn all(val: T) -> Self {
Self::new(val.clone(), val.clone(), val.clone(), val.clone())
}
}