Add dim, size_of, rows, and cols static methods to appropriate type aliases

This commit is contained in:
Brendan Zabarauskas 2012-11-25 23:32:52 +10:00
parent b753d27ac8
commit 911eb6bbc1
2 changed files with 186 additions and 0 deletions

View file

@ -20,6 +20,8 @@
/// ~~~
///
use core::sys::size_of;
use mat::{NumericMatrix, NumericMatrixNxN, Mat2, Mat3, Mat4};
use vec::{Vector, NumericVector, Vec2, Vec3, Vec4};
use quat::{/*Quaternion, */Quat};
@ -55,6 +57,9 @@ pub impl vec2 {
#[inline(always)] static pure fn from_value(v: f32) -> vec2 { Vector::from_value(v) }
#[inline(always)] static pure fn identity() -> vec2 { NumericVector::identity() }
#[inline(always)] static pure fn zero() -> vec2 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 2 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<vec2>() }
}
pub impl vec3 {
@ -62,6 +67,9 @@ pub impl vec3 {
#[inline(always)] static pure fn from_value(v: f32) -> vec3 { Vector::from_value(v) }
#[inline(always)] static pure fn identity() -> vec3 { NumericVector::identity() }
#[inline(always)] static pure fn zero() -> vec3 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 3 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<vec3>() }
}
pub impl vec4 {
@ -69,6 +77,9 @@ pub impl vec4 {
#[inline(always)] static pure fn from_value(v: f32) -> vec4 { Vector::from_value(v) }
#[inline(always)] static pure fn identity() -> vec4 { NumericVector::identity() }
#[inline(always)] static pure fn zero() -> vec4 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 4 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<vec4>() }
}
@ -77,6 +88,9 @@ pub impl dvec2 {
#[inline(always)] static pure fn from_value(v: f64) -> dvec2 { Vector::from_value(v) }
#[inline(always)] static pure fn identity() -> dvec2 { NumericVector::identity() }
#[inline(always)] static pure fn zero() -> dvec2 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 2 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<dvec2>() }
}
pub impl dvec3 {
@ -84,6 +98,9 @@ pub impl dvec3 {
#[inline(always)] static pure fn from_value(v: f64) -> dvec3 { Vector::from_value(v) }
#[inline(always)] static pure fn identity() -> dvec3 { NumericVector::identity() }
#[inline(always)] static pure fn zero() -> dvec3 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 3 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<dvec3>() }
}
pub impl dvec4 {
@ -91,6 +108,9 @@ pub impl dvec4 {
#[inline(always)] static pure fn from_value(v: f64) -> dvec4 { Vector::from_value(v) }
#[inline(always)] static pure fn identity() -> dvec4 { NumericVector::identity() }
#[inline(always)] static pure fn zero() -> dvec4 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 4 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<dvec4>() }
}
@ -99,6 +119,9 @@ pub impl bvec2 {
#[inline(always)] static pure fn from_value(v: bool) -> bvec2 { Vector::from_value(v) }
// #[inline(always)] static pure fn identity() -> bvec2 { NumericVector::identity() }
// #[inline(always)] static pure fn zero() -> bvec2 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 2 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<bvec2>() }
}
pub impl bvec3 {
@ -106,6 +129,9 @@ pub impl bvec3 {
#[inline(always)] static pure fn from_value(v: bool) -> bvec3 { Vector::from_value(v) }
// #[inline(always)] static pure fn identity() -> bvec3 { NumericVector::identity() }
// #[inline(always)] static pure fn zero() -> bvec3 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 3 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<bvec3>() }
}
pub impl bvec4 {
@ -113,6 +139,9 @@ pub impl bvec4 {
#[inline(always)] static pure fn from_value(v: bool) -> bvec4 { Vector::from_value(v) }
// #[inline(always)] static pure fn identity() -> bvec4 { NumericVector::identity() }
// #[inline(always)] static pure fn zero() -> bvec4 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 4 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<bvec4>() }
}
@ -121,6 +150,9 @@ pub impl ivec2 {
#[inline(always)] static pure fn from_value(v: i32) -> ivec2 { Vector::from_value(v) }
#[inline(always)] static pure fn identity() -> ivec2 { NumericVector::identity() }
#[inline(always)] static pure fn zero() -> ivec2 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 2 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<ivec2>() }
}
pub impl ivec3 {
@ -128,6 +160,9 @@ pub impl ivec3 {
#[inline(always)] static pure fn from_value(v: i32) -> ivec3 { Vector::from_value(v) }
#[inline(always)] static pure fn identity() -> ivec3 { NumericVector::identity() }
#[inline(always)] static pure fn zero() -> ivec3 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 3 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<ivec3>() }
}
pub impl ivec4 {
@ -135,6 +170,9 @@ pub impl ivec4 {
#[inline(always)] static pure fn from_value(v: i32) -> ivec4 { Vector::from_value(v) }
#[inline(always)] static pure fn identity() -> ivec4 { NumericVector::identity() }
#[inline(always)] static pure fn zero() -> ivec4 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 4 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<ivec4>() }
}
@ -143,6 +181,9 @@ pub impl uvec2 {
#[inline(always)] static pure fn from_value(v: u32) -> uvec2 { Vector::from_value(v) }
#[inline(always)] static pure fn identity() -> uvec2 { NumericVector::identity() }
#[inline(always)] static pure fn zero() -> uvec2 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 2 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<uvec2>() }
}
pub impl uvec3 {
@ -150,6 +191,9 @@ pub impl uvec3 {
#[inline(always)] static pure fn from_value(v: u32) -> uvec3 { Vector::from_value(v) }
#[inline(always)] static pure fn identity() -> uvec3 { NumericVector::identity() }
#[inline(always)] static pure fn zero() -> uvec3 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 3 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<uvec3>() }
}
pub impl uvec4 {
@ -157,6 +201,9 @@ pub impl uvec4 {
#[inline(always)] static pure fn from_value(v: u32) -> uvec4 { Vector::from_value(v) }
#[inline(always)] static pure fn identity() -> uvec4 { NumericVector::identity() }
#[inline(always)] static pure fn zero() -> uvec4 { NumericVector::zero() }
#[inline(always)] static pure fn dim() -> uint { 4 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<uvec4>() }
}
@ -199,6 +246,11 @@ pub impl mat2 {
#[inline(always)] static pure fn from_value(v: f32) -> mat2 { mat2x2::from_value(v) }
#[inline(always)] static pure fn identity() -> mat2 { mat2x2::identity() }
#[inline(always)] static pure fn zero() -> mat2 { mat2x2::zero() }
#[inline(always)] static pure fn dim() -> uint { mat2x2::dim() }
#[inline(always)] static pure fn rows() -> uint { mat2x2::rows() }
#[inline(always)] static pure fn cols() -> uint { mat2x2::cols() }
#[inline(always)] static pure fn size_of() -> uint { mat2x2::size_of() }
}
pub impl mat3 {
@ -209,6 +261,11 @@ pub impl mat3 {
#[inline(always)] static pure fn from_value(v: f32) -> mat3 { mat3x3::from_value(v) }
#[inline(always)] static pure fn identity() -> mat3 { mat3x3::identity() }
#[inline(always)] static pure fn zero() -> mat3 { mat3x3::zero() }
#[inline(always)] static pure fn dim() -> uint { mat3x3::dim() }
#[inline(always)] static pure fn rows() -> uint { mat3x3::rows() }
#[inline(always)] static pure fn cols() -> uint { mat3x3::cols() }
#[inline(always)] static pure fn size_of() -> uint { mat3x3::size_of() }
}
pub impl mat4 {
@ -219,6 +276,11 @@ pub impl mat4 {
#[inline(always)] static pure fn from_value(v: f32) -> mat4 { mat4x4::from_value(v) }
#[inline(always)] static pure fn identity() -> mat4 { mat4x4::identity() }
#[inline(always)] static pure fn zero() -> mat4 { mat4x4::zero() }
#[inline(always)] static pure fn dim() -> uint { mat4x4::dim() }
#[inline(always)] static pure fn rows() -> uint { mat4x4::rows() }
#[inline(always)] static pure fn cols() -> uint { mat4x4::cols() }
#[inline(always)] static pure fn size_of() -> uint { mat4x4::size_of() }
}
pub impl mat2x2 {
@ -229,6 +291,11 @@ pub impl mat2x2 {
#[inline(always)] static pure fn from_value(v: f32) -> mat2x2 { Mat2::from_value(v) }
#[inline(always)] static pure fn identity() -> mat2x2 { NumericMatrixNxN::identity() }
#[inline(always)] static pure fn zero() -> mat2x2 { NumericMatrix::zero() }
#[inline(always)] static pure fn dim() -> uint { 2 }
#[inline(always)] static pure fn rows() -> uint { 2 }
#[inline(always)] static pure fn cols() -> uint { 2 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<mat2x2>() }
}
pub impl mat3x3 {
@ -239,6 +306,11 @@ pub impl mat3x3 {
#[inline(always)] static pure fn from_value(v: f32) -> mat3x3 { Mat3::from_value(v) }
#[inline(always)] static pure fn identity() -> mat3x3 { NumericMatrixNxN::identity() }
#[inline(always)] static pure fn zero() -> mat3x3 { NumericMatrix::zero() }
#[inline(always)] static pure fn dim() -> uint { 3 }
#[inline(always)] static pure fn rows() -> uint { 3 }
#[inline(always)] static pure fn cols() -> uint { 3 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<mat3x3>() }
}
pub impl mat4x4 {
@ -249,6 +321,11 @@ pub impl mat4x4 {
#[inline(always)] static pure fn from_value(v: f32) -> mat4x4 { Mat4::from_value(v) }
#[inline(always)] static pure fn identity() -> mat4x4 { NumericMatrixNxN::identity() }
#[inline(always)] static pure fn zero() -> mat4x4 { NumericMatrix::zero() }
#[inline(always)] static pure fn dim() -> uint { 4 }
#[inline(always)] static pure fn rows() -> uint { 4 }
#[inline(always)] static pure fn cols() -> uint { 4 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<mat4x4>() }
}
@ -260,6 +337,11 @@ pub impl dmat2 {
#[inline(always)] static pure fn from_value(v: f64) -> dmat2 { dmat2x2::from_value(v) }
#[inline(always)] static pure fn identity() -> dmat2 { dmat2x2::identity() }
#[inline(always)] static pure fn zero() -> dmat2 { NumericMatrix::zero() }
#[inline(always)] static pure fn dim() -> uint { dmat2x2::dim() }
#[inline(always)] static pure fn rows() -> uint { dmat2x2::rows() }
#[inline(always)] static pure fn cols() -> uint { dmat2x2::cols() }
#[inline(always)] static pure fn size_of() -> uint { dmat2x2::size_of() }
}
pub impl dmat3 {
@ -269,6 +351,11 @@ pub impl dmat3 {
-> dmat3 { dmat3x3::from_cols(move c0, move c1, move c2) }
#[inline(always)] static pure fn identity() -> dmat3 { dmat3x3::identity() }
#[inline(always)] static pure fn zero() -> dmat3 { dmat3x3::zero() }
#[inline(always)] static pure fn dim() -> uint { dmat3x3::dim() }
#[inline(always)] static pure fn rows() -> uint { dmat3x3::rows() }
#[inline(always)] static pure fn cols() -> uint { dmat3x3::cols() }
#[inline(always)] static pure fn size_of() -> uint { dmat3x3::size_of() }
}
pub impl dmat4 {
@ -278,6 +365,11 @@ pub impl dmat4 {
-> dmat4 { dmat4x4::from_cols(move c0, move c1, move c2, move c3) }
#[inline(always)] static pure fn identity() -> dmat4 { dmat4x4::identity() }
#[inline(always)] static pure fn zero() -> dmat4 { dmat4x4::zero() }
#[inline(always)] static pure fn dim() -> uint { dmat4x4::dim() }
#[inline(always)] static pure fn rows() -> uint { dmat4x4::rows() }
#[inline(always)] static pure fn cols() -> uint { dmat4x4::cols() }
#[inline(always)] static pure fn size_of() -> uint { dmat4x4::size_of() }
}
pub impl dmat2x2 {
@ -288,6 +380,11 @@ pub impl dmat2x2 {
#[inline(always)] static pure fn from_value(v: f64) -> dmat2x2 { Mat2::from_value(v) }
#[inline(always)] static pure fn identity() -> dmat2x2 { NumericMatrixNxN::identity() }
#[inline(always)] static pure fn zero() -> dmat2x2 { NumericMatrix::zero() }
#[inline(always)] static pure fn dim() -> uint { 2 }
#[inline(always)] static pure fn rows() -> uint { 2 }
#[inline(always)] static pure fn cols() -> uint { 2 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<dmat2x2>() }
}
pub impl dmat3x3 {
@ -298,6 +395,11 @@ pub impl dmat3x3 {
#[inline(always)] static pure fn from_value(v: f64) -> dmat3x3 { Mat3::from_value(v) }
#[inline(always)] static pure fn identity() -> dmat3x3 { NumericMatrixNxN::identity() }
#[inline(always)] static pure fn zero() -> dmat3x3 { NumericMatrix::zero() }
#[inline(always)] static pure fn dim() -> uint { 3 }
#[inline(always)] static pure fn rows() -> uint { 3 }
#[inline(always)] static pure fn cols() -> uint { 3 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<dmat3x3>() }
}
pub impl dmat4x4 {
@ -308,6 +410,11 @@ pub impl dmat4x4 {
#[inline(always)] static pure fn from_value(v: f64) -> dmat4x4 { Mat4::from_value(v) }
#[inline(always)] static pure fn identity() -> dmat4x4 { NumericMatrixNxN::identity() }
#[inline(always)] static pure fn zero() -> dmat4x4 { NumericMatrix::zero() }
#[inline(always)] static pure fn dim() -> uint { 4 }
#[inline(always)] static pure fn rows() -> uint { 4 }
#[inline(always)] static pure fn cols() -> uint { 4 }
#[inline(always)] static pure fn size_of() -> uint { size_of::<dmat4x4>() }
}

View file

@ -11,6 +11,12 @@ fn test_vec() {
assert vec2::zero() == vec2::new(0f32, 0f32);
assert vec3::zero() == vec3::new(0f32, 0f32, 0f32);
assert vec4::zero() == vec4::new(0f32, 0f32, 0f32, 0f32);
assert vec2::dim() == 2;
assert vec3::dim() == 3;
assert vec4::dim() == 4;
assert vec2::size_of() == vec2::dim() * 4;
assert vec3::size_of() == vec3::dim() * 4;
assert vec4::size_of() == vec4::dim() * 4;
assert dvec2::identity() == dvec2::from_value(1f64);
assert dvec3::identity() == dvec3::from_value(1f64);
@ -21,6 +27,19 @@ fn test_vec() {
assert dvec2::zero() == dvec2::new(0f64, 0f64);
assert dvec3::zero() == dvec3::new(0f64, 0f64, 0f64);
assert dvec4::zero() == dvec4::new(0f64, 0f64, 0f64, 0f64);
assert dvec2::dim() == 2;
assert dvec3::dim() == 3;
assert dvec4::dim() == 4;
assert dvec2::size_of() == dvec2::dim() * 8;
assert dvec3::size_of() == dvec3::dim() * 8;
assert dvec4::size_of() == dvec4::dim() * 8;
assert bvec2::dim() == 2;
assert bvec3::dim() == 3;
assert bvec4::dim() == 4;
assert bvec2::size_of() == bvec2::dim() * 1;
assert bvec3::size_of() == bvec3::dim() * 1;
assert bvec4::size_of() == bvec4::dim() * 1;
assert ivec2::identity() == ivec2::from_value(1i32);
assert ivec3::identity() == ivec3::from_value(1i32);
@ -42,6 +61,12 @@ fn test_vec() {
assert ivec2::zero() == ivec2::new(0, 0);
assert ivec3::zero() == ivec3::new(0, 0, 0);
assert ivec4::zero() == ivec4::new(0, 0, 0, 0);
assert ivec2::dim() == 2;
assert ivec3::dim() == 3;
assert ivec4::dim() == 4;
assert ivec2::size_of() == ivec2::dim() * 4;
assert ivec3::size_of() == ivec3::dim() * 4;
assert ivec4::size_of() == ivec4::dim() * 4;
assert uvec2::identity() == uvec2::from_value(1u32);
assert uvec3::identity() == uvec3::from_value(1u32);
@ -63,6 +88,12 @@ fn test_vec() {
assert uvec2::zero() == uvec2::new(0, 0);
assert uvec3::zero() == uvec3::new(0, 0, 0);
assert uvec4::zero() == uvec4::new(0, 0, 0, 0);
assert uvec2::dim() == 2;
assert uvec3::dim() == 3;
assert uvec4::dim() == 4;
assert uvec2::size_of() == uvec2::dim() * 4;
assert uvec3::size_of() == uvec3::dim() * 4;
assert uvec4::size_of() == uvec4::dim() * 4;
}
#[test]
@ -94,6 +125,18 @@ fn test_mat_nxn() {
vec4::zero(),
vec4::zero(),
vec4::zero());
assert mat2x2::dim() == 2;
assert mat3x3::dim() == 3;
assert mat4x4::dim() == 4;
assert mat2x2::rows() == 2;
assert mat3x3::rows() == 3;
assert mat4x4::rows() == 4;
assert mat2x2::cols() == 2;
assert mat3x3::cols() == 3;
assert mat4x4::cols() == 4;
assert mat2x2::size_of() == mat2x2::rows() * mat2x2::cols() * 4;
assert mat3x3::size_of() == mat3x3::rows() * mat3x3::cols() * 4;
assert mat4x4::size_of() == mat4x4::rows() * mat4x4::cols() * 4;
assert dmat2x2::identity() == dmat2x2::new(1f64, 0f64,
0f64, 1f64);
@ -122,6 +165,18 @@ fn test_mat_nxn() {
dvec4::zero(),
dvec4::zero(),
dvec4::zero());
assert dmat2x2::dim() == 2;
assert dmat3x3::dim() == 3;
assert dmat4x4::dim() == 4;
assert dmat2x2::rows() == 2;
assert dmat3x3::rows() == 3;
assert dmat4x4::rows() == 4;
assert dmat2x2::cols() == 2;
assert dmat3x3::cols() == 3;
assert dmat4x4::cols() == 4;
assert dmat2x2::size_of() == dmat2x2::rows() * dmat2x2::cols() * 8;
assert dmat3x3::size_of() == dmat3x3::rows() * dmat3x3::cols() * 8;
assert dmat4x4::size_of() == dmat4x4::rows() * dmat4x4::cols() * 8;
}
#[test]
@ -132,6 +187,18 @@ fn test_mat_n() {
assert mat2::zero() == mat2x2::zero();
assert mat3::zero() == mat3x3::zero();
assert mat4::zero() == mat4x4::zero();
assert mat2::dim() == 2;
assert mat3::dim() == 3;
assert mat4::dim() == 4;
assert mat2::rows() == 2;
assert mat3::rows() == 3;
assert mat4::rows() == 4;
assert mat2::cols() == 2;
assert mat3::cols() == 3;
assert mat4::cols() == 4;
assert mat2::size_of() == mat2::rows() * mat2::cols() * 4;
assert mat3::size_of() == mat3::rows() * mat3::cols() * 4;
assert mat4::size_of() == mat4::rows() * mat4::cols() * 4;
assert dmat2::identity() == dmat2x2::identity();
assert dmat3::identity() == dmat3x3::identity();
@ -139,4 +206,16 @@ fn test_mat_n() {
assert dmat2::zero() == dmat2x2::zero();
assert dmat3::zero() == dmat3x3::zero();
assert dmat4::zero() == dmat4x4::zero();
assert dmat2::dim() == 2;
assert dmat3::dim() == 3;
assert dmat4::dim() == 4;
assert dmat2::rows() == 2;
assert dmat3::rows() == 3;
assert dmat4::rows() == 4;
assert dmat2::cols() == 2;
assert dmat3::cols() == 3;
assert dmat4::cols() == 4;
assert dmat2::size_of() == dmat2::rows() * dmat2::cols() * 8;
assert dmat3::size_of() == dmat3::rows() * dmat3::cols() * 8;
assert dmat4::size_of() == dmat4::rows() * dmat4::cols() * 8;
}