implement shift operators
This commit is contained in:
parent
085d9185a9
commit
338669b60f
@ -141,6 +141,12 @@ macro_rules! impl_vector {
|
|||||||
$crate::impl_vector_operator!(BitOr, bitor );
|
$crate::impl_vector_operator!(BitOr, bitor );
|
||||||
$crate::impl_vector_assign_operator!(BitXorAssign, bitxor_assign );
|
$crate::impl_vector_assign_operator!(BitXorAssign, bitxor_assign );
|
||||||
$crate::impl_vector_operator!(BitXor, bitxor );
|
$crate::impl_vector_operator!(BitXor, bitxor );
|
||||||
|
|
||||||
|
// Impl shift operators
|
||||||
|
$crate::impl_vector_shift_assign_operator!(ShlAssign, shl_assign);
|
||||||
|
$crate::impl_vector_shift_operator!(Shl, shl);
|
||||||
|
$crate::impl_vector_shift_assign_operator!(ShrAssign, shr_assign);
|
||||||
|
$crate::impl_vector_shift_operator!(Shr, shr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
@ -183,6 +189,46 @@ macro_rules! impl_vector_assign_operator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#[doc(hidden)]
|
||||||
|
#[macro_export(local_inner_macros)]
|
||||||
|
macro_rules! impl_vector_shift_operator {
|
||||||
|
($trait: ident, $method: ident ) => {
|
||||||
|
impl<const N:usize,T:core::ops::$trait<U,Output=V>,U,V> core::ops::$trait<Vector<N,U>> for Vector<N,T>{
|
||||||
|
type Output=Vector<N,V>;
|
||||||
|
#[inline]
|
||||||
|
fn $method(self,rhs:Vector<N,U>)->Self::Output{
|
||||||
|
self.map_zip(rhs,|(a,b)|a.$method(b))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl<const N:usize,T:core::ops::$trait<u32,Output=V>,V> core::ops::$trait<u32> for Vector<N,T>{
|
||||||
|
type Output=Vector<N,V>;
|
||||||
|
#[inline]
|
||||||
|
fn $method(self,rhs:u32)->Self::Output{
|
||||||
|
self.map(|t|t.$method(rhs))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[doc(hidden)]
|
||||||
|
#[macro_export(local_inner_macros)]
|
||||||
|
macro_rules! impl_vector_shift_assign_operator {
|
||||||
|
($trait: ident, $method: ident ) => {
|
||||||
|
impl<const N:usize,T:core::ops::$trait<U>,U> core::ops::$trait<Vector<N,U>> for Vector<N,T>{
|
||||||
|
#[inline]
|
||||||
|
fn $method(&mut self,rhs:Vector<N,U>){
|
||||||
|
self.array.iter_mut().zip(rhs.array)
|
||||||
|
.for_each(|(a,b)|a.$method(b))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl<const N:usize,T:core::ops::$trait<u32>> core::ops::$trait<u32> for Vector<N,T>{
|
||||||
|
#[inline]
|
||||||
|
fn $method(&mut self,rhs:u32){
|
||||||
|
self.array.iter_mut()
|
||||||
|
.for_each(|t|t.$method(rhs))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
#[macro_export(local_inner_macros)]
|
#[macro_export(local_inner_macros)]
|
||||||
|
Loading…
Reference in New Issue
Block a user