#[repr(C)]
#[derive(Debug, Clone, PartialEq)]
pub struct Vec3<T> {
pub x: T,
pub y: T,
pub z: T
}
impl <T> Vec3 <T> {
pub fn new(x: T, y: T, z: T) -> Self {
return Self { x, y, z }
}
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(), 3) }
}
pub fn as_mut_slice(&mut self) -> &mut [T] {
unsafe { std::slice::from_raw_parts_mut(self.as_mut_ptr(), 3) }
}
}
impl <T> Vec3<T> where T: Clone {
pub fn all(val: T) -> Self {
Self::new(val.clone(), val.clone(), val.clone())
}
}
#[macro_export]
macro_rules! vec3 {
($x: expr, $y: expr, $z: expr) => {
{
Vec3::new($x, $y, $z)
}
}
}