Move to_ptr method into new ToPtr trait
This commit is contained in:
parent
2ad204a424
commit
1d4825e005
5 changed files with 105 additions and 80 deletions
|
@ -6,12 +6,12 @@ use core::vec::raw::buf_as_slice;
|
|||
|
||||
use angle::Degrees;
|
||||
use channel::Channel;
|
||||
use dim::Dimensional;
|
||||
use dim::{Dimensional, ToPtr};
|
||||
use funs::common::Sign;
|
||||
use num::cast::{cast, NumCast};
|
||||
|
||||
|
||||
pub trait Color<T>: Dimensional<T>, Eq {
|
||||
pub trait Color<T>: Dimensional<T>, ToPtr<T>, Eq {
|
||||
pure fn inverse(&self) -> self;
|
||||
|
||||
pure fn to_rgb_u8(&self) -> RGB<u8>;
|
||||
|
@ -142,7 +142,7 @@ pub impl<T:Copy> RGB<T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> RGB<T>: Dimensional<T> {
|
||||
pub impl<T> RGB<T>: Dimensional<T> {
|
||||
#[inline(always)]
|
||||
static pure fn dim() -> uint { 3 }
|
||||
|
||||
|
@ -150,11 +150,6 @@ pub impl<T:Copy> RGB<T>: Dimensional<T> {
|
|||
static pure fn size_of() -> uint {
|
||||
size_of::<RGB<T>>()
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
ptr::to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> RGB<T>: Index<uint, T> {
|
||||
|
@ -167,6 +162,13 @@ pub impl<T:Copy> RGB<T>: Index<uint, T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> RGB<T>: ToPtr<T> {
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
ptr::to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy Num NumCast Channel Eq Ord> RGB<T>: Color<T> {
|
||||
#[inline(always)]
|
||||
pure fn inverse(&self) -> RGB<T> {
|
||||
|
@ -263,7 +265,7 @@ pub impl<T:Copy> RGBA<T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> RGBA<T>: Dimensional<T> {
|
||||
pub impl<T> RGBA<T>: Dimensional<T> {
|
||||
#[inline(always)]
|
||||
static pure fn dim() -> uint { 4 }
|
||||
|
||||
|
@ -271,11 +273,6 @@ pub impl<T:Copy> RGBA<T>: Dimensional<T> {
|
|||
static pure fn size_of() -> uint {
|
||||
size_of::<RGBA<T>>()
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
ptr::to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> RGBA<T>: Index<uint, T> {
|
||||
|
@ -288,6 +285,13 @@ pub impl<T:Copy> RGBA<T>: Index<uint, T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> RGBA<T>: ToPtr<T> {
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
ptr::to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy Num NumCast Channel Eq Ord> RGBA<T>: Color<T> {
|
||||
#[inline(always)]
|
||||
pure fn inverse(&self) -> RGBA<T> {
|
||||
|
@ -381,7 +385,7 @@ pub impl<T:Copy> HSV<T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> HSV<T>: Dimensional<T> {
|
||||
pub impl<T> HSV<T>: Dimensional<T> {
|
||||
#[inline(always)]
|
||||
static pure fn dim() -> uint { 3 }
|
||||
|
||||
|
@ -389,11 +393,6 @@ pub impl<T:Copy> HSV<T>: Dimensional<T> {
|
|||
static pure fn size_of() -> uint {
|
||||
size_of::<HSV<T>>()
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
ptr::to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> HSV<T>: Index<uint, T> {
|
||||
|
@ -406,6 +405,13 @@ pub impl<T:Copy> HSV<T>: Index<uint, T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> HSV<T>: ToPtr<T> {
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
ptr::to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy Num NumCast Channel Eq Ord> HSV<T>: Color<T> {
|
||||
#[inline(always)]
|
||||
pure fn inverse(&self) -> HSV<T> {
|
||||
|
@ -478,7 +484,7 @@ pub impl<T:Copy> HSVA<T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> HSVA<T>: Dimensional<T> {
|
||||
pub impl<T> HSVA<T>: Dimensional<T> {
|
||||
#[inline(always)]
|
||||
static pure fn dim() -> uint { 4 }
|
||||
|
||||
|
@ -486,11 +492,6 @@ pub impl<T:Copy> HSVA<T>: Dimensional<T> {
|
|||
static pure fn size_of() -> uint {
|
||||
size_of::<HSVA<T>>()
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
ptr::to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> HSVA<T>: Index<uint, T> {
|
||||
|
@ -503,6 +504,13 @@ pub impl<T:Copy> HSVA<T>: Index<uint, T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> HSVA<T>: ToPtr<T> {
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
ptr::to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy Num NumCast Channel Eq Ord> HSVA<T>: Color<T> {
|
||||
#[inline(always)]
|
||||
pure fn inverse(&self) -> HSVA<T> {
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
pub trait Dimensional<T>: Index<uint, T> {
|
||||
static pure fn dim() -> uint; // dim and size_of are pretty useless at the moment due to
|
||||
static pure fn size_of() -> uint; // how Rust's static methods are currently implemented
|
||||
}
|
||||
|
||||
pub trait ToPtr<T> {
|
||||
pure fn to_ptr(&self) -> *T;
|
||||
}
|
58
src/mat.rs
58
src/mat.rs
|
@ -6,7 +6,7 @@ use core::vec::raw::buf_as_slice;
|
|||
|
||||
use std::cmp::FuzzyEq;
|
||||
|
||||
use dim::Dimensional;
|
||||
use dim::{Dimensional, ToPtr};
|
||||
use funs::common::*;
|
||||
use funs::exponential::*;
|
||||
use num::cast::*;
|
||||
|
@ -17,7 +17,7 @@ use vec::{NumericVector, Vec2, Vec3, Vec4};
|
|||
///
|
||||
/// The base Matrix trait
|
||||
///
|
||||
pub trait Matrix<T, Col, Row>: Dimensional<T>, Eq, DefaultEq {
|
||||
pub trait Matrix<T, Col, Row>: Dimensional<Col>, ToPtr<T>, Eq, DefaultEq {
|
||||
static pure fn rows() -> uint;
|
||||
static pure fn cols() -> uint;
|
||||
|
||||
|
@ -181,17 +181,12 @@ pub impl<T:Copy> Mat2<T>: Matrix<T, Vec2<T>, Vec2<T>> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Mat2<T>: Dimensional<T> {
|
||||
pub impl<T:Copy> Mat2<T>: Dimensional<Vec2<T>> {
|
||||
#[inline(always)]
|
||||
static pure fn dim() -> uint { 2 }
|
||||
|
||||
#[inline(always)]
|
||||
static pure fn size_of() -> uint { size_of::<Mat2<T>>() }
|
||||
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
self[0].to_ptr()
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Mat2<T>: Index<uint, Vec2<T>> {
|
||||
|
@ -204,6 +199,13 @@ pub impl<T:Copy> Mat2<T>: Index<uint, Vec2<T>> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Mat2<T>: ToPtr<T> {
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
self[0].to_ptr()
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy DefaultEq> Mat2<T>: MatrixNxN<T, Vec2<T>> {
|
||||
#[inline(always)]
|
||||
pure fn is_symmetric(&self) -> bool {
|
||||
|
@ -212,7 +214,7 @@ pub impl<T:Copy DefaultEq> Mat2<T>: MatrixNxN<T, Vec2<T>> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy Num NumCast> Mat2<T>: NumericMatrix<T, Vec2<T>, Vec2<T>> {
|
||||
pub impl<T:Copy Num NumCast DefaultEq> Mat2<T>: NumericMatrix<T, Vec2<T>, Vec2<T>> {
|
||||
#[inline(always)]
|
||||
static pure fn zero() -> Mat2<T> {
|
||||
Mat2::from_cols(NumericVector::zero(),
|
||||
|
@ -244,7 +246,7 @@ pub impl<T:Copy Num NumCast> Mat2<T>: NumericMatrix<T, Vec2<T>, Vec2<T>> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy Num> Mat2<T>: Neg<Mat2<T>> {
|
||||
pub impl<T:Copy Num NumCast> Mat2<T>: Neg<Mat2<T>> {
|
||||
#[inline(always)]
|
||||
pure fn neg(&self) -> Mat2<T> {
|
||||
Mat2::from_cols(-self[0], -self[1])
|
||||
|
@ -422,17 +424,12 @@ pub impl<T:Copy> Mat3<T>: Matrix<T, Vec3<T>, Vec3<T>> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Mat3<T>: Dimensional<T> {
|
||||
pub impl<T:Copy> Mat3<T>: Dimensional<Vec3<T>> {
|
||||
#[inline(always)]
|
||||
static pure fn dim() -> uint { 3 }
|
||||
|
||||
#[inline(always)]
|
||||
static pure fn size_of() -> uint { size_of::<Mat3<T>>() }
|
||||
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
self[0].to_ptr()
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Mat3<T>: Index<uint, Vec3<T>> {
|
||||
|
@ -445,6 +442,13 @@ pub impl<T:Copy> Mat3<T>: Index<uint, Vec3<T>> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Mat3<T>: ToPtr<T> {
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
self[0].to_ptr()
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy DefaultEq> Mat3<T>: MatrixNxN<T, Vec3<T>> {
|
||||
#[inline(always)]
|
||||
pure fn is_symmetric(&self) -> bool {
|
||||
|
@ -459,7 +463,7 @@ pub impl<T:Copy DefaultEq> Mat3<T>: MatrixNxN<T, Vec3<T>> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy Num NumCast> Mat3<T>: NumericMatrix<T, Vec3<T>, Vec3<T>> {
|
||||
pub impl<T:Copy Num NumCast DefaultEq> Mat3<T>: NumericMatrix<T, Vec3<T>, Vec3<T>> {
|
||||
#[inline(always)]
|
||||
static pure fn zero() -> Mat3<T> {
|
||||
Mat3::from_cols(NumericVector::zero(),
|
||||
|
@ -496,7 +500,7 @@ pub impl<T:Copy Num NumCast> Mat3<T>: NumericMatrix<T, Vec3<T>, Vec3<T>> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy Num> Mat3<T>: Neg<Mat3<T>> {
|
||||
pub impl<T:Copy Num NumCast> Mat3<T>: Neg<Mat3<T>> {
|
||||
#[inline(always)]
|
||||
pure fn neg(&self) -> Mat3<T> {
|
||||
Mat3::from_cols(-self[0], -self[1], -self[2])
|
||||
|
@ -742,17 +746,12 @@ pub impl<T:Copy> Mat4<T>: Matrix<T, Vec4<T>, Vec4<T>> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Mat4<T>: Dimensional<T> {
|
||||
pub impl<T> Mat4<T>: Dimensional<Vec4<T>> {
|
||||
#[inline(always)]
|
||||
static pure fn dim() -> uint { 4 }
|
||||
|
||||
#[inline(always)]
|
||||
static pure fn size_of() -> uint { size_of::<Mat4<T>>() }
|
||||
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
self[0].to_ptr()
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Mat4<T>: Index<uint, Vec4<T>> {
|
||||
|
@ -765,6 +764,13 @@ pub impl<T:Copy> Mat4<T>: Index<uint, Vec4<T>> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Mat4<T>: ToPtr<T> {
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
self[0].to_ptr()
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy DefaultEq> Mat4<T>: MatrixNxN<T, Vec4<T>> {
|
||||
#[inline(always)]
|
||||
pure fn is_symmetric(&self) -> bool {
|
||||
|
@ -786,7 +792,7 @@ pub impl<T:Copy DefaultEq> Mat4<T>: MatrixNxN<T, Vec4<T>> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy Num NumCast> Mat4<T>: NumericMatrix<T, Vec4<T>, Vec4<T>> {
|
||||
pub impl<T:Copy Num NumCast DefaultEq> Mat4<T>: NumericMatrix<T, Vec4<T>, Vec4<T>> {
|
||||
#[inline(always)]
|
||||
static pure fn zero() -> Mat4<T> {
|
||||
Mat4::from_cols(NumericVector::zero(),
|
||||
|
@ -828,7 +834,7 @@ pub impl<T:Copy Num NumCast> Mat4<T>: NumericMatrix<T, Vec4<T>, Vec4<T>> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy Num> Mat4<T>: Neg<Mat4<T>> {
|
||||
pub impl<T:Copy Num NumCast> Mat4<T>: Neg<Mat4<T>> {
|
||||
#[inline(always)]
|
||||
pure fn neg(&self) -> Mat4<T> {
|
||||
Mat4::from_cols(-self[0], -self[1], -self[2], -self[3])
|
||||
|
|
18
src/quat.rs
18
src/quat.rs
|
@ -6,7 +6,7 @@ use core::vec::raw::buf_as_slice;
|
|||
|
||||
use std::cmp::FuzzyEq;
|
||||
|
||||
use dim::Dimensional;
|
||||
use dim::{Dimensional, ToPtr};
|
||||
use funs::common::*;
|
||||
use funs::exponential::*;
|
||||
use funs::triganomic::*;
|
||||
|
@ -19,7 +19,7 @@ use vec::Vec3;
|
|||
///
|
||||
/// The base quaternion trait
|
||||
///
|
||||
pub trait Quaternion<T>: Dimensional<T>, Eq, DefaultEq, Neg<self> {
|
||||
pub trait Quaternion<T>: Dimensional<T>, ToPtr<T>, Eq, DefaultEq, Neg<self> {
|
||||
static pure fn identity() -> self;
|
||||
static pure fn zero() -> self;
|
||||
|
||||
|
@ -70,17 +70,12 @@ pub impl<T> Quat<T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Quat<T>: Dimensional<T> {
|
||||
pub impl<T> Quat<T>: Dimensional<T> {
|
||||
#[inline(always)]
|
||||
static pure fn dim() -> uint { 4 }
|
||||
|
||||
#[inline(always)]
|
||||
static pure fn size_of() -> uint { size_of::<Quat<T>>() }
|
||||
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Quat<T>: Index<uint, T> {
|
||||
|
@ -93,6 +88,13 @@ pub impl<T:Copy> Quat<T>: Index<uint, T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Quat<T>: ToPtr<T> {
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy Num NumCast Exp Extent Ord InvTrig> Quat<T>: Quaternion<T> {
|
||||
#[inline(always)]
|
||||
static pure fn identity() -> Quat<T> {
|
||||
|
|
46
src/vec.rs
46
src/vec.rs
|
@ -6,7 +6,7 @@ use core::vec::raw::buf_as_slice;
|
|||
|
||||
use std::cmp::FuzzyEq;
|
||||
|
||||
use dim::Dimensional;
|
||||
use dim::{Dimensional, ToPtr};
|
||||
use funs::exponential::Exp;
|
||||
use num::cast::*;
|
||||
use num::default_eq::DefaultEq;
|
||||
|
@ -14,7 +14,7 @@ use num::default_eq::DefaultEq;
|
|||
///
|
||||
/// The base vector trait
|
||||
///
|
||||
pub trait Vector<T>: Dimensional<T>, Eq, DefaultEq {
|
||||
pub trait Vector<T>: Dimensional<T>, ToPtr<T>, Eq, DefaultEq {
|
||||
/// Construct the vector from a single value, copying it to each component
|
||||
static pure fn from_value(value: T) -> self;
|
||||
}
|
||||
|
@ -107,17 +107,12 @@ pub impl<T:Copy> Vec2<T>: Vector<T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Vec2<T>: Dimensional<T> {
|
||||
pub impl<T> Vec2<T>: Dimensional<T> {
|
||||
#[inline(always)]
|
||||
static pure fn dim() -> uint { 2 }
|
||||
|
||||
#[inline(always)]
|
||||
static pure fn size_of() -> uint { size_of::<Vec2<T>>() }
|
||||
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
ptr::to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Vec2<T>: Index<uint, T> {
|
||||
|
@ -129,6 +124,13 @@ pub impl<T:Copy> Vec2<T>: Index<uint, T> {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Vec2<T>: ToPtr<T> {
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
ptr::to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy Num NumCast> Vec2<T>: NumericVector<T> {
|
||||
#[inline(always)]
|
||||
|
@ -267,17 +269,12 @@ pub impl<T:Copy> Vec3<T>: Vector<T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Vec3<T>: Dimensional<T> {
|
||||
pub impl<T> Vec3<T>: Dimensional<T> {
|
||||
#[inline(always)]
|
||||
static pure fn dim() -> uint { 3 }
|
||||
|
||||
#[inline(always)]
|
||||
static pure fn size_of() -> uint { size_of::<Vec3<T>>() }
|
||||
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Vec3<T>: Index<uint, T> {
|
||||
|
@ -290,6 +287,13 @@ pub impl<T:Copy> Vec3<T>: Index<uint, T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Vec3<T>: ToPtr<T> {
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
ptr::to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy Num NumCast> Vec3<T>: NumericVector<T> {
|
||||
#[inline(always)]
|
||||
static pure fn identity() -> Vec3<T> {
|
||||
|
@ -445,17 +449,12 @@ pub impl<T:Copy> Vec4<T>: Vector<T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Vec4<T>: Dimensional<T> {
|
||||
pub impl<T> Vec4<T>: Dimensional<T> {
|
||||
#[inline(always)]
|
||||
static pure fn dim() -> uint { 4 }
|
||||
|
||||
#[inline(always)]
|
||||
static pure fn size_of() -> uint { size_of::<Vec4<T>>() }
|
||||
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Vec4<T>: Index<uint, T> {
|
||||
|
@ -468,6 +467,13 @@ pub impl<T:Copy> Vec4<T>: Index<uint, T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy> Vec4<T>: ToPtr<T> {
|
||||
#[inline(always)]
|
||||
pure fn to_ptr(&self) -> *T {
|
||||
ptr::to_unsafe_ptr(&self[0])
|
||||
}
|
||||
}
|
||||
|
||||
pub impl<T:Copy Num NumCast> Vec4<T>: NumericVector<T> {
|
||||
#[inline(always)]
|
||||
static pure fn identity() -> Vec4<T> {
|
||||
|
|
Loading…
Reference in a new issue