Fix multiple borrow errors
This commit is contained in:
parent
f800a0ae04
commit
86241f69cb
2 changed files with 87 additions and 31 deletions
106
src/mat.rs
106
src/mat.rs
|
@ -451,7 +451,9 @@ impl<T:Copy + Float + NumAssign> BaseMat<T, Vec2<T>> for Mat2<T> {
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn swap_cols(&mut self, a: uint, b: uint) {
|
fn swap_cols(&mut self, a: uint, b: uint) {
|
||||||
util::swap(self.col_mut(a), self.col_mut(b));
|
let tmp = self[a];
|
||||||
|
*self.col_mut(a) = self[b];
|
||||||
|
*self.col_mut(b) = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
|
@ -503,8 +505,14 @@ impl<T:Copy + Float + NumAssign> BaseMat<T, Vec2<T>> for Mat2<T> {
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn transpose_self(&mut self) {
|
fn transpose_self(&mut self) {
|
||||||
util::swap(self.x.index_mut(1), self.y.index_mut(0));
|
let tmp01 = self[0][1];
|
||||||
util::swap(self.y.index_mut(0), self.x.index_mut(1));
|
let tmp10 = self[1][0];
|
||||||
|
|
||||||
|
*self.col_mut(0).index_mut(1) = self[1][0];
|
||||||
|
*self.col_mut(1).index_mut(0) = self[0][1];
|
||||||
|
|
||||||
|
*self.col_mut(1).index_mut(0) = tmp01;
|
||||||
|
*self.col_mut(0).index_mut(1) = tmp10;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
|
@ -851,7 +859,9 @@ impl<T:Copy + Float + NumAssign> BaseMat<T, Vec3<T>> for Mat3<T> {
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn swap_cols(&mut self, a: uint, b: uint) {
|
fn swap_cols(&mut self, a: uint, b: uint) {
|
||||||
util::swap(self.col_mut(a), self.col_mut(b));
|
let tmp = self[a];
|
||||||
|
*self.col_mut(a) = self[b];
|
||||||
|
*self.col_mut(b) = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
|
@ -907,14 +917,26 @@ impl<T:Copy + Float + NumAssign> BaseMat<T, Vec3<T>> for Mat3<T> {
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn transpose_self(&mut self) {
|
fn transpose_self(&mut self) {
|
||||||
util::swap(self.col_mut(0).index_mut(1), self.col_mut(1).index_mut(0));
|
let tmp01 = self[0][1];
|
||||||
util::swap(self.col_mut(0).index_mut(2), self.col_mut(2).index_mut(0));
|
let tmp02 = self[0][2];
|
||||||
|
let tmp10 = self[1][0];
|
||||||
|
let tmp12 = self[1][2];
|
||||||
|
let tmp20 = self[2][0];
|
||||||
|
let tmp21 = self[2][1];
|
||||||
|
|
||||||
util::swap(self.col_mut(1).index_mut(0), self.col_mut(0).index_mut(1));
|
*self.col_mut(0).index_mut(1) = self[1][0];
|
||||||
util::swap(self.col_mut(1).index_mut(2), self.col_mut(2).index_mut(1));
|
*self.col_mut(0).index_mut(2) = self[2][0];
|
||||||
|
*self.col_mut(1).index_mut(0) = self[0][1];
|
||||||
|
*self.col_mut(1).index_mut(2) = self[2][1];
|
||||||
|
*self.col_mut(2).index_mut(0) = self[0][2];
|
||||||
|
*self.col_mut(2).index_mut(1) = self[1][2];
|
||||||
|
|
||||||
util::swap(self.col_mut(2).index_mut(0), self.col_mut(0).index_mut(2));
|
*self.col_mut(1).index_mut(0) = tmp01;
|
||||||
util::swap(self.col_mut(2).index_mut(1), self.col_mut(1).index_mut(2));
|
*self.col_mut(2).index_mut(0) = tmp02;
|
||||||
|
*self.col_mut(0).index_mut(1) = tmp10;
|
||||||
|
*self.col_mut(2).index_mut(1) = tmp12;
|
||||||
|
*self.col_mut(0).index_mut(2) = tmp20;
|
||||||
|
*self.col_mut(1).index_mut(2) = tmp21;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
|
@ -1435,15 +1457,18 @@ impl<T:Copy + Float + NumAssign> BaseMat<T, Vec4<T>> for Mat4<T> {
|
||||||
I.swap_cols(i1, j);
|
I.swap_cols(i1, j);
|
||||||
|
|
||||||
// Scale col j to have a unit diagonal
|
// Scale col j to have a unit diagonal
|
||||||
I.col_mut(j).div_self_t(A[j][j]);
|
let ajj = A[j][j];
|
||||||
A.col_mut(j).div_self_t(A[j][j]);
|
I.col_mut(j).div_self_t(ajj);
|
||||||
|
A.col_mut(j).div_self_t(ajj);
|
||||||
|
|
||||||
// Eliminate off-diagonal elems in col j of A,
|
// Eliminate off-diagonal elems in col j of A,
|
||||||
// doing identical ops to I
|
// doing identical ops to I
|
||||||
for uint::range(0, 4) |i| {
|
for uint::range(0, 4) |i| {
|
||||||
if i != j {
|
if i != j {
|
||||||
I.col_mut(i).sub_self_v(&I[j].mul_t(A[i][j]));
|
let ij_mul_aij = I[j].mul_t(A[i][j]);
|
||||||
A.col_mut(i).sub_self_v(&A[j].mul_t(A[i][j]));
|
let aj_mul_aij = A[j].mul_t(A[i][j]);
|
||||||
|
I.col_mut(i).sub_self_v(&ij_mul_aij);
|
||||||
|
A.col_mut(i).sub_self_v(&aj_mul_aij);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1471,7 +1496,9 @@ impl<T:Copy + Float + NumAssign> BaseMat<T, Vec4<T>> for Mat4<T> {
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn swap_cols(&mut self, a: uint, b: uint) {
|
fn swap_cols(&mut self, a: uint, b: uint) {
|
||||||
util::swap(self.col_mut(a), self.col_mut(b));
|
let tmp = self[a];
|
||||||
|
*self.col_mut(a) = self[b];
|
||||||
|
*self.col_mut(b) = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
|
@ -1531,21 +1558,44 @@ impl<T:Copy + Float + NumAssign> BaseMat<T, Vec4<T>> for Mat4<T> {
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn transpose_self(&mut self) {
|
fn transpose_self(&mut self) {
|
||||||
util::swap(self.col_mut(0).index_mut(1), self.col_mut(1).index_mut(0));
|
let tmp01 = self[0][1];
|
||||||
util::swap(self.col_mut(0).index_mut(2), self.col_mut(2).index_mut(0));
|
let tmp02 = self[0][2];
|
||||||
util::swap(self.col_mut(0).index_mut(3), self.col_mut(3).index_mut(0));
|
let tmp03 = self[0][3];
|
||||||
|
let tmp10 = self[1][0];
|
||||||
|
let tmp12 = self[1][2];
|
||||||
|
let tmp13 = self[1][3];
|
||||||
|
let tmp20 = self[2][0];
|
||||||
|
let tmp21 = self[2][1];
|
||||||
|
let tmp23 = self[2][3];
|
||||||
|
let tmp30 = self[3][0];
|
||||||
|
let tmp31 = self[3][1];
|
||||||
|
let tmp32 = self[3][2];
|
||||||
|
|
||||||
util::swap(self.col_mut(1).index_mut(0), self.col_mut(0).index_mut(1));
|
*self.col_mut(0).index_mut(1) = self[1][0];
|
||||||
util::swap(self.col_mut(1).index_mut(2), self.col_mut(2).index_mut(1));
|
*self.col_mut(0).index_mut(2) = self[2][0];
|
||||||
util::swap(self.col_mut(1).index_mut(3), self.col_mut(3).index_mut(1));
|
*self.col_mut(0).index_mut(3) = self[3][0];
|
||||||
|
*self.col_mut(1).index_mut(0) = self[0][1];
|
||||||
|
*self.col_mut(1).index_mut(2) = self[2][1];
|
||||||
|
*self.col_mut(1).index_mut(3) = self[3][1];
|
||||||
|
*self.col_mut(2).index_mut(0) = self[0][2];
|
||||||
|
*self.col_mut(2).index_mut(1) = self[1][2];
|
||||||
|
*self.col_mut(2).index_mut(3) = self[3][2];
|
||||||
|
*self.col_mut(3).index_mut(0) = self[0][3];
|
||||||
|
*self.col_mut(3).index_mut(1) = self[1][3];
|
||||||
|
*self.col_mut(3).index_mut(2) = self[2][3];
|
||||||
|
|
||||||
util::swap(self.col_mut(2).index_mut(0), self.col_mut(0).index_mut(2));
|
*self.col_mut(1).index_mut(0) = tmp01;
|
||||||
util::swap(self.col_mut(2).index_mut(1), self.col_mut(1).index_mut(2));
|
*self.col_mut(2).index_mut(0) = tmp02;
|
||||||
util::swap(self.col_mut(2).index_mut(3), self.col_mut(3).index_mut(2));
|
*self.col_mut(3).index_mut(0) = tmp03;
|
||||||
|
*self.col_mut(0).index_mut(1) = tmp10;
|
||||||
util::swap(self.col_mut(3).index_mut(0), self.col_mut(0).index_mut(3));
|
*self.col_mut(2).index_mut(1) = tmp12;
|
||||||
util::swap(self.col_mut(3).index_mut(1), self.col_mut(1).index_mut(3));
|
*self.col_mut(3).index_mut(1) = tmp13;
|
||||||
util::swap(self.col_mut(3).index_mut(2), self.col_mut(2).index_mut(3));
|
*self.col_mut(0).index_mut(2) = tmp20;
|
||||||
|
*self.col_mut(1).index_mut(2) = tmp21;
|
||||||
|
*self.col_mut(3).index_mut(2) = tmp23;
|
||||||
|
*self.col_mut(0).index_mut(3) = tmp30;
|
||||||
|
*self.col_mut(1).index_mut(3) = tmp31;
|
||||||
|
*self.col_mut(2).index_mut(3) = tmp32;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
|
|
12
src/vec.rs
12
src/vec.rs
|
@ -546,7 +546,9 @@ impl<T:Copy + Eq> BaseVec<T> for Vec2<T> {
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn swap(&mut self, a: uint, b: uint) {
|
fn swap(&mut self, a: uint, b: uint) {
|
||||||
util::swap(self.index_mut(a), self.index_mut(b));
|
let tmp = self[a];
|
||||||
|
*self.index_mut(a) = self[b];
|
||||||
|
*self.index_mut(b) = tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -857,7 +859,9 @@ impl<T:Copy + Eq> BaseVec<T> for Vec3<T> {
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn swap(&mut self, a: uint, b: uint) {
|
fn swap(&mut self, a: uint, b: uint) {
|
||||||
util::swap(self.index_mut(a), self.index_mut(b));
|
let tmp = self[a];
|
||||||
|
*self.index_mut(a) = self[b];
|
||||||
|
*self.index_mut(b) = tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1191,7 +1195,9 @@ impl<T:Copy + Eq> BaseVec<T> for Vec4<T> {
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn swap(&mut self, a: uint, b: uint) {
|
fn swap(&mut self, a: uint, b: uint) {
|
||||||
util::swap(self.index_mut(a), self.index_mut(b));
|
let tmp = self[a];
|
||||||
|
*self.index_mut(a) = self[b];
|
||||||
|
*self.index_mut(b) = tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue