From ac0732409e40382b7d47d8f7d5dee4cd2ebd3453 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Mon, 2 Sep 2013 11:49:05 +1000 Subject: [PATCH] Add ident and zero to matrices --- src/cgmath/types/matrix.rs | 87 +++++++++++++++++++++++++++----------- 1 file changed, 63 insertions(+), 24 deletions(-) diff --git a/src/cgmath/types/matrix.rs b/src/cgmath/types/matrix.rs index 77b8701..8c423f9 100644 --- a/src/cgmath/types/matrix.rs +++ b/src/cgmath/types/matrix.rs @@ -24,7 +24,7 @@ use types::vector::*; // Constructors -impl Mat2 { +impl Mat2 { #[inline] pub fn new(c0r0: S, c0r1: S, c1r0: S, c1r1: S) -> Mat2 { @@ -36,9 +36,25 @@ impl Mat2 { pub fn from_cols(c0: Vec2, c1: Vec2) -> Mat2 { Mat2 { x: c0, y: c1 } } + + #[inline] + pub fn from_value(value: S) -> Mat2 { + Mat2::new(value.clone(), zero(), + zero(), value.clone()) + } + + #[inline] + pub fn zero() -> Mat2 { + Mat2::from_value(zero()) + } + + #[inline] + pub fn ident() -> Mat2 { + Mat2::from_value(one()) + } } -impl Mat3 { +impl Mat3 { #[inline] pub fn new(c0r0:S, c0r1:S, c0r2:S, c1r0:S, c1r1:S, c1r2:S, @@ -52,9 +68,26 @@ impl Mat3 { pub fn from_cols(c0: Vec3, c1: Vec3, c2: Vec3) -> Mat3 { Mat3 { x: c0, y: c1, z: c2 } } + + #[inline] + pub fn from_value(value: S) -> Mat3 { + Mat3::new(value.clone(), zero(), zero(), + zero(), value.clone(), zero(), + zero(), zero(), value.clone()) + } + + #[inline] + pub fn zero() -> Mat3 { + Mat3::from_value(zero()) + } + + #[inline] + pub fn ident() -> Mat3 { + Mat3::from_value(one()) + } } -impl Mat4 { +impl Mat4 { #[inline] pub fn new(c0r0: S, c0r1: S, c0r2: S, c0r3: S, c1r0: S, c1r1: S, c1r2: S, c1r3: S, @@ -70,6 +103,24 @@ impl Mat4 { pub fn from_cols(c0: Vec4, c1: Vec4, c2: Vec4, c3: Vec4) -> Mat4 { Mat4 { x: c0, y: c1, z: c2, w: c3 } } + + #[inline] + pub fn from_value(value: S) -> Mat4 { + Mat4::new(value.clone(), zero(), zero(), zero(), + zero(), value.clone(), zero(), zero(), + zero(), zero(), value.clone(), zero(), + zero(), zero(), zero(), value.clone()) + } + + #[inline] + pub fn zero() -> Mat4 { + Mat4::from_value(zero()) + } + + #[inline] + pub fn ident() -> Mat4 { + Mat4::from_value(one()) + } } // Trait impls @@ -110,33 +161,21 @@ impl Module for Mat2; impl Module for Mat3; impl Module for Mat4; -impl One for Mat2 { - fn one() -> Mat2 { - Mat2::new(one(), zero(), - zero(), one()) - } +impl One for Mat2 { + #[inline] fn one() -> Mat2 { Mat2::ident() } } -impl One for Mat3 { - fn one() -> Mat3 { - Mat3::new(one(), zero(), zero(), - zero(), one(), zero(), - zero(), zero(), one()) - } +impl One for Mat3 { + #[inline] fn one() -> Mat3 { Mat3::ident() } } -impl One for Mat4 { - fn one() -> Mat4 { - Mat4::new(one(), zero(), zero(), zero(), - zero(), one(), zero(), zero(), - zero(), zero(), one(), zero(), - zero(), zero(), zero(), one()) - } +impl One for Mat4 { + #[inline] fn one() -> Mat4 { Mat4::ident() } } -impl Ring for Mat2; -impl Ring for Mat3; -impl Ring for Mat4; +impl Ring for Mat2; +impl Ring for Mat3; +impl Ring for Mat4; impl> Matrix