Impl Neg operator trait for vectors and matricies
This commit is contained in:
parent
6e548843c1
commit
8c173c8e51
2 changed files with 15 additions and 1 deletions
|
@ -135,6 +135,7 @@ pub trait Matrix
|
||||||
V: Clone + Vector<S, VSlice> + Array<S, VSlice>, VSlice
|
V: Clone + Vector<S, VSlice> + Array<S, VSlice>, VSlice
|
||||||
>
|
>
|
||||||
: Array<V, Slice>
|
: Array<V, Slice>
|
||||||
|
+ Neg<Self>
|
||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
fn c<'a>(&'a self, c: uint) -> &'a V { self.i(c) }
|
fn c<'a>(&'a self, c: uint) -> &'a V { self.i(c) }
|
||||||
|
@ -173,6 +174,11 @@ pub trait Matrix
|
||||||
*self.mut_cr(cb, rb) = tmp;
|
*self.mut_cr(cb, rb) = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn neg_self(&mut self) {
|
||||||
|
for c in self.mut_iter() { *c = c.neg() }
|
||||||
|
}
|
||||||
|
|
||||||
// fn swap_cr(&mut self, (ca, ra): (uint, uint), (cb, rb): (uint, uint)) {
|
// fn swap_cr(&mut self, (ca, ra): (uint, uint), (cb, rb): (uint, uint)) {
|
||||||
// let tmp = self.cr(ca, ra).clone();
|
// let tmp = self.cr(ca, ra).clone();
|
||||||
// *self.mut_cr(ca, ra) = self.cr(cb, rb).clone();
|
// *self.mut_cr(ca, ra) = self.cr(cb, rb).clone();
|
||||||
|
@ -201,6 +207,10 @@ pub trait Matrix
|
||||||
// pub fn is_symmetric(&self) -> bool;
|
// pub fn is_symmetric(&self) -> bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<S: Clone + Num> Neg<Mat2<S>> for Mat2<S> { #[inline] fn neg(&self) -> Mat2<S> { self.map(|c| c.neg()) } }
|
||||||
|
impl<S: Clone + Num> Neg<Mat3<S>> for Mat3<S> { #[inline] fn neg(&self) -> Mat3<S> { self.map(|c| c.neg()) } }
|
||||||
|
impl<S: Clone + Num> Neg<Mat4<S>> for Mat4<S> { #[inline] fn neg(&self) -> Mat4<S> { self.map(|c| c.neg()) } }
|
||||||
|
|
||||||
impl<S: Clone + Num + ApproxEq<S>>
|
impl<S: Clone + Num + ApproxEq<S>>
|
||||||
Matrix<S, [Vec2<S>, ..2], Vec2<S>, [S, ..2]>
|
Matrix<S, [Vec2<S>, ..2], Vec2<S>, [S, ..2]>
|
||||||
for Mat2<S>
|
for Mat2<S>
|
||||||
|
|
|
@ -61,8 +61,8 @@ pub trait Vector
|
||||||
Slice
|
Slice
|
||||||
>
|
>
|
||||||
: Array<S, Slice>
|
: Array<S, Slice>
|
||||||
|
+ Neg<Self>
|
||||||
{
|
{
|
||||||
#[inline] fn neg(&self) -> Self { self.map(|x| x.neg()) }
|
|
||||||
#[inline] fn neg_self(&mut self) { for x in self.mut_iter() { *x = x.neg() } }
|
#[inline] fn neg_self(&mut self) { for x in self.mut_iter() { *x = x.neg() } }
|
||||||
|
|
||||||
#[inline] fn add_s(&self, s: S) -> Self { self.map(|x| x.add(&s)) }
|
#[inline] fn add_s(&self, s: S) -> Self { self.map(|x| x.add(&s)) }
|
||||||
|
@ -100,6 +100,10 @@ pub trait Vector
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<S: Clone + Num> Neg<Vec2<S>> for Vec2<S> { #[inline] fn neg(&self) -> Vec2<S> { self.map(|x| x.neg()) } }
|
||||||
|
impl<S: Clone + Num> Neg<Vec3<S>> for Vec3<S> { #[inline] fn neg(&self) -> Vec3<S> { self.map(|x| x.neg()) } }
|
||||||
|
impl<S: Clone + Num> Neg<Vec4<S>> for Vec4<S> { #[inline] fn neg(&self) -> Vec4<S> { self.map(|x| x.neg()) } }
|
||||||
|
|
||||||
impl<S: Clone + Num> Vector<S, [S, ..2]> for Vec2<S>;
|
impl<S: Clone + Num> Vector<S, [S, ..2]> for Vec2<S>;
|
||||||
impl<S: Clone + Num> Vector<S, [S, ..3]> for Vec3<S>;
|
impl<S: Clone + Num> Vector<S, [S, ..3]> for Vec3<S>;
|
||||||
impl<S: Clone + Num> Vector<S, [S, ..4]> for Vec4<S>;
|
impl<S: Clone + Num> Vector<S, [S, ..4]> for Vec4<S>;
|
||||||
|
|
Loading…
Reference in a new issue