Move index overload methods into main Vector/Matrix impls

This commit is contained in:
Brendan Zabarauskas 2012-11-14 10:28:56 +10:00
parent 37d3bcd495
commit 07df95313e
2 changed files with 51 additions and 64 deletions

View file

@ -155,6 +155,14 @@ pub impl<T:Copy> Mat2<T>: Matrix<T, Vec2<T>, Vec2<T>> {
Vec2::new(self[0][i],
self[1][i])
}
#[inline(always)]
pure fn index(i: uint) -> Vec2<T> {
unsafe { do buf_as_slice(
transmute::<*Mat2<T>, *Vec2<T>>(
to_unsafe_ptr(&self)), 2) |slice| { slice[i] }
}
}
}
pub impl<T:Copy Num NumCast> Mat2<T>: NumericMatrix<T, Vec2<T>, Vec2<T>> {
@ -259,16 +267,6 @@ pub impl<T:Copy Num NumCast FuzzyEq> Mat2<T>: Matrix2<T> {
}
}
pub impl<T:Copy> Mat2<T>: Index<uint, Vec2<T>> {
#[inline(always)]
pure fn index(i: uint) -> Vec2<T> {
unsafe { do buf_as_slice(
transmute::<*Mat2<T>, *Vec2<T>>(
to_unsafe_ptr(&self)), 2) |slice| { slice[i] }
}
}
}
// TODO: make work for T:Integer
pub impl<T:Copy FuzzyEq> Mat2<T>: Eq {
#[inline(always)]
@ -390,6 +388,14 @@ pub impl<T:Copy> Mat3<T>: Matrix<T, Vec3<T>, Vec3<T>> {
self[1][i],
self[2][i])
}
#[inline(always)]
pure fn index(i: uint) -> Vec3<T> {
unsafe { do buf_as_slice(
transmute::<*Mat3<T>, *Vec3<T>>(
to_unsafe_ptr(&self)), 3) |slice| { slice[i] }
}
}
}
pub impl<T:Copy Num> Mat3<T>: NumericMatrix<T, Vec3<T>, Vec3<T>> {
@ -552,16 +558,6 @@ pub impl<T:Copy Num NumCast Ord> Mat3<T>: ToQuat<T> {
}
}
pub impl<T:Copy> Mat3<T>: Index<uint, Vec3<T>> {
#[inline(always)]
pure fn index(i: uint) -> Vec3<T> {
unsafe { do buf_as_slice(
transmute::<*Mat3<T>, *Vec3<T>>(
to_unsafe_ptr(&self)), 3) |slice| { slice[i] }
}
}
}
// TODO: make work for T:Integer
pub impl<T:Copy FuzzyEq> Mat3<T>: Eq {
#[inline(always)]
@ -703,7 +699,14 @@ pub impl<T:Copy> Mat4<T>: Matrix<T, Vec4<T>, Vec4<T>> {
self[2][i],
self[3][i])
}
#[inline(always)]
pure fn index(i: uint) -> Vec4<T> {
unsafe { do buf_as_slice(
transmute::<*Mat4<T>, *Vec4<T>>(
to_unsafe_ptr(&self)), 4) |slice| { slice[i] }
}
}
}
pub impl<T:Copy Num> Mat4<T>: NumericMatrix<T, Vec4<T>, Vec4<T>> {
@ -896,16 +899,6 @@ pub impl<T> Mat4<T>: Matrix4<T> {
}
pub impl<T:Copy> Mat4<T>: Index<uint, Vec4<T>> {
#[inline(always)]
pure fn index(i: uint) -> Vec4<T> {
unsafe { do buf_as_slice(
transmute::<*Mat4<T>, *Vec4<T>>(
to_unsafe_ptr(&self)), 4) |slice| { slice[i] }
}
}
}
// TODO: make work for T:Integer
pub impl<T:Copy FuzzyEq> Mat4<T>: Eq {
#[inline(always)]

View file

@ -117,9 +117,17 @@ pub mod Vec2 {
}
}
pub impl<T> Vec2<T>: Vector<T> {
pub impl<T:Copy> Vec2<T>: Vector<T> {
#[inline(always)]
static pure fn dim() -> uint { 2 }
#[inline(always)]
pure fn index(i: uint) -> T {
unsafe { do buf_as_slice(
transmute::<*Vec2<T>, *T>(
to_unsafe_ptr(&self)), 2) |slice| { slice[i] }
}
}
}
pub impl<T:Copy Num> Vec2<T>: NumericVector<T> {
@ -184,16 +192,6 @@ pub impl<T:Copy Num NumCast Exp> Vec2<T>: GeometricVector<T> {
}
}
pub impl<T:Copy> Vec2<T>: Index<uint, T> {
#[inline(always)]
pure fn index(i: uint) -> T {
unsafe { do buf_as_slice(
transmute::<*Vec2<T>, *T>(
to_unsafe_ptr(&self)), 2) |slice| { slice[i] }
}
}
}
// TODO: make work for T:Integer
pub impl<T:Copy FuzzyEq> Vec2<T>: Eq {
#[inline(always)]
@ -295,9 +293,17 @@ pub impl<T:Copy Num> Vec3<T>: Vector3<T> {
}
}
pub impl<T> Vec3<T>: Vector<T> {
pub impl<T:Copy> Vec3<T>: Vector<T> {
#[inline(always)]
static pure fn dim() -> uint { 3 }
#[inline(always)]
pure fn index(i: uint) -> T {
unsafe { do buf_as_slice(
transmute::<*Vec3<T>, *T>(
to_unsafe_ptr(&self)), 3) |slice| { slice[i] }
}
}
}
pub impl<T:Copy Num> Vec3<T>: NumericVector<T> {
@ -368,16 +374,6 @@ pub impl<T:Copy Num NumCast Exp> Vec3<T>: GeometricVector<T> {
}
}
pub impl<T:Copy> Vec3<T>: Index<uint, T> {
#[inline(always)]
pure fn index(i: uint) -> T {
unsafe { do buf_as_slice(
transmute::<*Vec3<T>, *T>(
to_unsafe_ptr(&self)), 3) |slice| { slice[i] }
}
}
}
// TODO: make work for T:Integer
pub impl<T:Copy FuzzyEq> Vec3<T>: Eq {
#[inline(always)]
@ -479,9 +475,17 @@ pub mod Vec4 {
}
}
pub impl<T> Vec4<T>: Vector<T> {
pub impl<T:Copy> Vec4<T>: Vector<T> {
#[inline(always)]
static pure fn dim() -> uint { 4 }
#[inline(always)]
pure fn index(i: uint) -> T {
unsafe { do buf_as_slice(
transmute::<*Vec4<T>, *T>(
to_unsafe_ptr(&self)), 4) |slice| { slice[i] }
}
}
}
pub impl<T:Copy Num> Vec4<T>: NumericVector<T> {
@ -558,16 +562,6 @@ pub impl<T:Copy Num NumCast Exp> Vec4<T>: GeometricVector<T> {
}
}
pub impl<T:Copy> Vec4<T>: Index<uint, T> {
#[inline(always)]
pure fn index(i: uint) -> T {
unsafe { do buf_as_slice(
transmute::<*Vec4<T>, *T>(
to_unsafe_ptr(&self)), 4) |slice| { slice[i] }
}
}
}
pub impl<T:Copy FuzzyEq> Vec4<T>: Eq {
#[inline(always)]
pure fn eq(other: &Vec4<T>) -> bool {