2024-09-05 23:32:19 +00:00
|
|
|
#[doc(hidden)]
|
|
|
|
#[macro_export(local_inner_macros)]
|
|
|
|
macro_rules! impl_wide_vector_operations_2arg_not_const_generic {
|
|
|
|
(
|
|
|
|
($lhs:expr, $rhs:expr)
|
|
|
|
) => {
|
|
|
|
impl<const N:usize> Vector<N,fixed_wide::fixed::Fixed<{$lhs},{$lhs*32}>>{
|
|
|
|
paste::item!{
|
|
|
|
#[inline]
|
|
|
|
pub fn [<wide_mul_ $lhs _ $rhs>](self,rhs:Vector<N,fixed_wide::fixed::Fixed<{$rhs},{$rhs*32}>>)->Vector<N,fixed_wide::fixed::Fixed<{$lhs+$rhs},{($lhs+$rhs)*32}>>{
|
|
|
|
self.array.map_zip(|(a,b)|a.[<wide_mul_ $lhs _ $rhs>](b))
|
|
|
|
}
|
|
|
|
#[inline]
|
|
|
|
pub fn [<wide_dot_ $lhs _ $rhs>](self,rhs:Vector<N,fixed_wide::fixed::Fixed<{$rhs},{$rhs*32}>>)->fixed_wide::fixed::Fixed<{$lhs+$rhs},{($lhs+$rhs)*32}>{
|
|
|
|
self.array.into_iter().zip(rhs.array).map(|(a,b)|a.[<wide_mul_ $lhs _ $rhs>](b)).sum()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#[doc(hidden)]
|
|
|
|
#[macro_export(local_inner_macros)]
|
|
|
|
macro_rules! impl_wide_vector_operations_1arg_not_const_generic {
|
|
|
|
(
|
|
|
|
$n:expr
|
|
|
|
) => {
|
|
|
|
impl $struct<fixed_wide::fixed::Fixed<{$n},{$n*32}>>{
|
|
|
|
paste::item!{
|
|
|
|
#[inline]
|
|
|
|
pub fn wide_length_squared(&self)->fixed_wide::fixed::Fixed<{$n*2},{$n*2*32}>{
|
|
|
|
self.array.into_iter().map(|t|t.[<wide_mul_ $n _ $n>](t)).sum()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|