2013-09-22 16:58:21 +08:00
|
|
|
//! Vectors with dimensions known at compile-time.
|
|
|
|
|
2014-04-02 04:58:06 +08:00
|
|
|
#![allow(missing_doc)] // we allow missing to avoid having to document the vector components.
|
2013-09-15 03:11:43 +08:00
|
|
|
|
2014-05-12 07:31:22 +08:00
|
|
|
use std::mem;
|
2014-02-18 19:13:40 +08:00
|
|
|
use std::num::{Zero, One, Float, Bounded};
|
2014-03-22 04:57:58 +08:00
|
|
|
use std::slice::{Items, MutItems};
|
2013-09-09 17:19:54 +08:00
|
|
|
use std::iter::{Iterator, FromIterator};
|
2014-04-13 16:24:17 +08:00
|
|
|
use traits::operations::{ApproxEq, PartialOrd, PartialOrdering, PartialLess, PartialEqual,
|
|
|
|
PartialGreater, NotComparable};
|
2013-10-06 22:54:09 +08:00
|
|
|
use traits::geometry::{Transform, Rotate, FromHomogeneous, ToHomogeneous, Dot, Norm,
|
|
|
|
Translation, Translate};
|
2013-10-10 04:59:44 +08:00
|
|
|
use traits::structure::{Basis, Cast, Dim, Indexable, Iterable, IterableMut};
|
2013-09-07 14:23:09 +08:00
|
|
|
|
2013-07-22 16:26:20 +08:00
|
|
|
|
2013-07-24 22:50:40 +08:00
|
|
|
/// Vector of dimension 0.
|
2014-06-04 04:37:46 +08:00
|
|
|
#[deriving(Eq, PartialEq, Decodable, Clone, Rand, Zero, Show)]
|
2013-07-22 16:26:20 +08:00
|
|
|
pub struct Vec0<N>;
|
|
|
|
|
2014-09-16 09:30:36 +08:00
|
|
|
impl<N> Vec0<N> {
|
|
|
|
/// Creates a new vector.
|
|
|
|
#[inline]
|
|
|
|
pub fn new() -> Vec0<N> {
|
|
|
|
Vec0
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Creates a new vector. The parameter is not taken in account.
|
|
|
|
#[inline]
|
|
|
|
pub fn new_repeat(_: N) -> Vec0<N> {
|
|
|
|
Vec0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-07-24 22:50:40 +08:00
|
|
|
/// Vector of dimension 1.
|
2014-06-04 04:37:46 +08:00
|
|
|
#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show)]
|
2013-08-05 16:13:44 +08:00
|
|
|
pub struct Vec1<N> {
|
2013-08-05 15:44:56 +08:00
|
|
|
/// First component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub x: N
|
2013-07-24 22:50:40 +08:00
|
|
|
}
|
2013-07-22 16:26:20 +08:00
|
|
|
|
2013-09-15 03:11:43 +08:00
|
|
|
double_dispatch_binop_decl_trait!(Vec1, Vec1MulRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec1, Vec1DivRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec1, Vec1AddRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec1, Vec1SubRhs)
|
2013-10-10 04:59:44 +08:00
|
|
|
double_dispatch_cast_decl_trait!(Vec1, Vec1Cast)
|
2013-09-15 03:11:43 +08:00
|
|
|
mul_redispatch_impl!(Vec1, Vec1MulRhs)
|
|
|
|
div_redispatch_impl!(Vec1, Vec1DivRhs)
|
|
|
|
add_redispatch_impl!(Vec1, Vec1AddRhs)
|
|
|
|
sub_redispatch_impl!(Vec1, Vec1SubRhs)
|
2013-10-10 04:59:44 +08:00
|
|
|
cast_redispatch_impl!(Vec1, Vec1Cast)
|
2013-07-22 16:26:20 +08:00
|
|
|
new_impl!(Vec1, x)
|
2013-08-04 16:36:35 +08:00
|
|
|
ord_impl!(Vec1, x)
|
2013-07-25 05:54:54 +08:00
|
|
|
vec_axis_impl!(Vec1, x)
|
2013-10-10 04:59:44 +08:00
|
|
|
vec_cast_impl!(Vec1, Vec1Cast, x)
|
2014-08-16 18:16:26 +08:00
|
|
|
as_slice_impl!(Vec1, 1)
|
2013-07-22 16:26:20 +08:00
|
|
|
indexable_impl!(Vec1, 1)
|
2013-09-13 19:21:42 +08:00
|
|
|
at_fast_impl!(Vec1, 1)
|
2013-07-22 16:26:20 +08:00
|
|
|
new_repeat_impl!(Vec1, val, x)
|
|
|
|
dim_impl!(Vec1, 1)
|
2013-09-08 23:26:31 +08:00
|
|
|
container_impl!(Vec1)
|
2013-07-22 16:26:20 +08:00
|
|
|
// (specialized) basis_impl!(Vec1, 1)
|
2013-09-15 03:11:43 +08:00
|
|
|
add_impl!(Vec1, Vec1AddRhs, x)
|
|
|
|
sub_impl!(Vec1, Vec1SubRhs, x)
|
2013-10-04 00:25:57 +08:00
|
|
|
mul_impl!(Vec1, Vec1MulRhs, x)
|
|
|
|
div_impl!(Vec1, Vec1DivRhs, x)
|
2013-07-22 16:26:20 +08:00
|
|
|
neg_impl!(Vec1, x)
|
|
|
|
dot_impl!(Vec1, x)
|
2014-05-23 01:54:54 +08:00
|
|
|
vec_mul_scalar_impl!(Vec1, f64, Vec1MulRhs, x)
|
|
|
|
vec_mul_scalar_impl!(Vec1, f32, Vec1MulRhs, x)
|
|
|
|
vec_mul_scalar_impl!(Vec1, u64, Vec1MulRhs, x)
|
|
|
|
vec_mul_scalar_impl!(Vec1, u32, Vec1MulRhs, x)
|
|
|
|
vec_mul_scalar_impl!(Vec1, u16, Vec1MulRhs, x)
|
|
|
|
vec_mul_scalar_impl!(Vec1, u8, Vec1MulRhs, x)
|
|
|
|
vec_mul_scalar_impl!(Vec1, i64, Vec1MulRhs, x)
|
|
|
|
vec_mul_scalar_impl!(Vec1, i32, Vec1MulRhs, x)
|
|
|
|
vec_mul_scalar_impl!(Vec1, i16, Vec1MulRhs, x)
|
|
|
|
vec_mul_scalar_impl!(Vec1, i8, Vec1MulRhs, x)
|
|
|
|
vec_mul_scalar_impl!(Vec1, uint, Vec1MulRhs, x)
|
|
|
|
vec_mul_scalar_impl!(Vec1, int, Vec1MulRhs, x)
|
|
|
|
vec_div_scalar_impl!(Vec1, f64, Vec1DivRhs, x)
|
|
|
|
vec_div_scalar_impl!(Vec1, f32, Vec1DivRhs, x)
|
|
|
|
vec_div_scalar_impl!(Vec1, u64, Vec1DivRhs, x)
|
|
|
|
vec_div_scalar_impl!(Vec1, u32, Vec1DivRhs, x)
|
|
|
|
vec_div_scalar_impl!(Vec1, u16, Vec1DivRhs, x)
|
|
|
|
vec_div_scalar_impl!(Vec1, u8, Vec1DivRhs, x)
|
|
|
|
vec_div_scalar_impl!(Vec1, i64, Vec1DivRhs, x)
|
|
|
|
vec_div_scalar_impl!(Vec1, i32, Vec1DivRhs, x)
|
|
|
|
vec_div_scalar_impl!(Vec1, i16, Vec1DivRhs, x)
|
|
|
|
vec_div_scalar_impl!(Vec1, i8, Vec1DivRhs, x)
|
|
|
|
vec_div_scalar_impl!(Vec1, uint, Vec1DivRhs, x)
|
|
|
|
vec_div_scalar_impl!(Vec1, int, Vec1DivRhs, x)
|
|
|
|
vec_add_scalar_impl!(Vec1, f64, Vec1AddRhs, x)
|
|
|
|
vec_add_scalar_impl!(Vec1, f32, Vec1AddRhs, x)
|
|
|
|
vec_add_scalar_impl!(Vec1, u64, Vec1AddRhs, x)
|
|
|
|
vec_add_scalar_impl!(Vec1, u32, Vec1AddRhs, x)
|
|
|
|
vec_add_scalar_impl!(Vec1, u16, Vec1AddRhs, x)
|
|
|
|
vec_add_scalar_impl!(Vec1, u8, Vec1AddRhs, x)
|
|
|
|
vec_add_scalar_impl!(Vec1, i64, Vec1AddRhs, x)
|
|
|
|
vec_add_scalar_impl!(Vec1, i32, Vec1AddRhs, x)
|
|
|
|
vec_add_scalar_impl!(Vec1, i16, Vec1AddRhs, x)
|
|
|
|
vec_add_scalar_impl!(Vec1, i8, Vec1AddRhs, x)
|
|
|
|
vec_add_scalar_impl!(Vec1, uint, Vec1AddRhs, x)
|
|
|
|
vec_add_scalar_impl!(Vec1, int, Vec1AddRhs, x)
|
|
|
|
vec_sub_scalar_impl!(Vec1, f64, Vec1SubRhs, x)
|
|
|
|
vec_sub_scalar_impl!(Vec1, f32, Vec1SubRhs, x)
|
|
|
|
vec_sub_scalar_impl!(Vec1, u64, Vec1SubRhs, x)
|
|
|
|
vec_sub_scalar_impl!(Vec1, u32, Vec1SubRhs, x)
|
|
|
|
vec_sub_scalar_impl!(Vec1, u16, Vec1SubRhs, x)
|
|
|
|
vec_sub_scalar_impl!(Vec1, u8, Vec1SubRhs, x)
|
|
|
|
vec_sub_scalar_impl!(Vec1, i64, Vec1SubRhs, x)
|
|
|
|
vec_sub_scalar_impl!(Vec1, i32, Vec1SubRhs, x)
|
|
|
|
vec_sub_scalar_impl!(Vec1, i16, Vec1SubRhs, x)
|
|
|
|
vec_sub_scalar_impl!(Vec1, i8, Vec1SubRhs, x)
|
|
|
|
vec_sub_scalar_impl!(Vec1, uint, Vec1SubRhs, x)
|
|
|
|
vec_sub_scalar_impl!(Vec1, int, Vec1SubRhs, x)
|
2013-07-22 16:26:20 +08:00
|
|
|
translation_impl!(Vec1)
|
2013-09-15 03:11:43 +08:00
|
|
|
norm_impl!(Vec1, x)
|
2013-07-22 16:26:20 +08:00
|
|
|
approx_eq_impl!(Vec1, x)
|
2014-01-21 06:40:32 +08:00
|
|
|
one_impl!(Vec1, x)
|
2013-07-22 16:26:20 +08:00
|
|
|
from_iterator_impl!(Vec1, iterator)
|
2014-01-21 06:40:32 +08:00
|
|
|
bounded_impl!(Vec1, x)
|
2013-07-22 16:26:20 +08:00
|
|
|
iterable_impl!(Vec1, 1)
|
|
|
|
iterable_mut_impl!(Vec1, 1)
|
|
|
|
to_homogeneous_impl!(Vec1, Vec2, y, x)
|
|
|
|
from_homogeneous_impl!(Vec1, Vec2, y, x)
|
2013-08-23 22:29:08 +08:00
|
|
|
translate_impl!(Vec1)
|
|
|
|
rotate_impl!(Vec1)
|
|
|
|
transform_impl!(Vec1)
|
2013-07-22 16:26:20 +08:00
|
|
|
|
2013-07-24 22:50:40 +08:00
|
|
|
/// Vector of dimension 2.
|
2014-06-04 04:37:46 +08:00
|
|
|
#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show)]
|
2013-08-05 16:13:44 +08:00
|
|
|
pub struct Vec2<N> {
|
2013-08-05 15:44:56 +08:00
|
|
|
/// First component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub x: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Second component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub y: N
|
2013-07-22 16:26:20 +08:00
|
|
|
}
|
|
|
|
|
2013-09-15 03:11:43 +08:00
|
|
|
double_dispatch_binop_decl_trait!(Vec2, Vec2MulRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec2, Vec2DivRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec2, Vec2AddRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec2, Vec2SubRhs)
|
2013-10-10 04:59:44 +08:00
|
|
|
double_dispatch_cast_decl_trait!(Vec2, Vec2Cast)
|
2013-09-15 03:11:43 +08:00
|
|
|
mul_redispatch_impl!(Vec2, Vec2MulRhs)
|
|
|
|
div_redispatch_impl!(Vec2, Vec2DivRhs)
|
|
|
|
add_redispatch_impl!(Vec2, Vec2AddRhs)
|
|
|
|
sub_redispatch_impl!(Vec2, Vec2SubRhs)
|
2013-10-10 04:59:44 +08:00
|
|
|
cast_redispatch_impl!(Vec2, Vec2Cast)
|
2013-07-22 16:26:20 +08:00
|
|
|
new_impl!(Vec2, x, y)
|
2013-08-04 16:36:35 +08:00
|
|
|
ord_impl!(Vec2, x, y)
|
2013-07-25 05:54:54 +08:00
|
|
|
vec_axis_impl!(Vec2, x, y)
|
2013-10-10 04:59:44 +08:00
|
|
|
vec_cast_impl!(Vec2, Vec2Cast, x, y)
|
2014-08-16 18:16:26 +08:00
|
|
|
as_slice_impl!(Vec2, 2)
|
2013-07-22 16:26:20 +08:00
|
|
|
indexable_impl!(Vec2, 2)
|
2013-09-13 19:21:42 +08:00
|
|
|
at_fast_impl!(Vec2, 2)
|
2013-07-22 16:26:20 +08:00
|
|
|
new_repeat_impl!(Vec2, val, x, y)
|
|
|
|
dim_impl!(Vec2, 2)
|
2013-09-08 23:26:31 +08:00
|
|
|
container_impl!(Vec2)
|
2013-07-22 16:26:20 +08:00
|
|
|
// (specialized) basis_impl!(Vec2, 1)
|
2013-09-15 03:11:43 +08:00
|
|
|
add_impl!(Vec2, Vec2AddRhs, x, y)
|
|
|
|
sub_impl!(Vec2, Vec2SubRhs, x, y)
|
2013-10-04 00:25:57 +08:00
|
|
|
mul_impl!(Vec2, Vec2MulRhs, x, y)
|
|
|
|
div_impl!(Vec2, Vec2DivRhs, x, y)
|
2013-07-22 16:26:20 +08:00
|
|
|
neg_impl!(Vec2, x, y)
|
|
|
|
dot_impl!(Vec2, x, y)
|
2014-05-23 01:54:54 +08:00
|
|
|
vec_mul_scalar_impl!(Vec2, f64, Vec2MulRhs, x, y)
|
|
|
|
vec_mul_scalar_impl!(Vec2, f32, Vec2MulRhs, x, y)
|
|
|
|
vec_mul_scalar_impl!(Vec2, u64, Vec2MulRhs, x, y)
|
|
|
|
vec_mul_scalar_impl!(Vec2, u32, Vec2MulRhs, x, y)
|
|
|
|
vec_mul_scalar_impl!(Vec2, u16, Vec2MulRhs, x, y)
|
|
|
|
vec_mul_scalar_impl!(Vec2, u8, Vec2MulRhs, x, y)
|
|
|
|
vec_mul_scalar_impl!(Vec2, i64, Vec2MulRhs, x, y)
|
|
|
|
vec_mul_scalar_impl!(Vec2, i32, Vec2MulRhs, x, y)
|
|
|
|
vec_mul_scalar_impl!(Vec2, i16, Vec2MulRhs, x, y)
|
|
|
|
vec_mul_scalar_impl!(Vec2, i8, Vec2MulRhs, x, y)
|
|
|
|
vec_mul_scalar_impl!(Vec2, uint, Vec2MulRhs, x, y)
|
|
|
|
vec_mul_scalar_impl!(Vec2, int, Vec2MulRhs, x, y)
|
|
|
|
vec_div_scalar_impl!(Vec2, f64, Vec2DivRhs, x, y)
|
|
|
|
vec_div_scalar_impl!(Vec2, f32, Vec2DivRhs, x, y)
|
|
|
|
vec_div_scalar_impl!(Vec2, u64, Vec2DivRhs, x, y)
|
|
|
|
vec_div_scalar_impl!(Vec2, u32, Vec2DivRhs, x, y)
|
|
|
|
vec_div_scalar_impl!(Vec2, u16, Vec2DivRhs, x, y)
|
|
|
|
vec_div_scalar_impl!(Vec2, u8, Vec2DivRhs, x, y)
|
|
|
|
vec_div_scalar_impl!(Vec2, i64, Vec2DivRhs, x, y)
|
|
|
|
vec_div_scalar_impl!(Vec2, i32, Vec2DivRhs, x, y)
|
|
|
|
vec_div_scalar_impl!(Vec2, i16, Vec2DivRhs, x, y)
|
|
|
|
vec_div_scalar_impl!(Vec2, i8, Vec2DivRhs, x, y)
|
|
|
|
vec_div_scalar_impl!(Vec2, uint, Vec2DivRhs, x, y)
|
|
|
|
vec_div_scalar_impl!(Vec2, int, Vec2DivRhs, x, y)
|
|
|
|
vec_add_scalar_impl!(Vec2, f64, Vec2AddRhs, x, y)
|
|
|
|
vec_add_scalar_impl!(Vec2, f32, Vec2AddRhs, x, y)
|
|
|
|
vec_add_scalar_impl!(Vec2, u64, Vec2AddRhs, x, y)
|
|
|
|
vec_add_scalar_impl!(Vec2, u32, Vec2AddRhs, x, y)
|
|
|
|
vec_add_scalar_impl!(Vec2, u16, Vec2AddRhs, x, y)
|
|
|
|
vec_add_scalar_impl!(Vec2, u8, Vec2AddRhs, x, y)
|
|
|
|
vec_add_scalar_impl!(Vec2, i64, Vec2AddRhs, x, y)
|
|
|
|
vec_add_scalar_impl!(Vec2, i32, Vec2AddRhs, x, y)
|
|
|
|
vec_add_scalar_impl!(Vec2, i16, Vec2AddRhs, x, y)
|
|
|
|
vec_add_scalar_impl!(Vec2, i8, Vec2AddRhs, x, y)
|
|
|
|
vec_add_scalar_impl!(Vec2, uint, Vec2AddRhs, x, y)
|
|
|
|
vec_add_scalar_impl!(Vec2, int, Vec2AddRhs, x, y)
|
|
|
|
vec_sub_scalar_impl!(Vec2, f64, Vec2SubRhs, x, y)
|
|
|
|
vec_sub_scalar_impl!(Vec2, f32, Vec2SubRhs, x, y)
|
|
|
|
vec_sub_scalar_impl!(Vec2, u64, Vec2SubRhs, x, y)
|
|
|
|
vec_sub_scalar_impl!(Vec2, u32, Vec2SubRhs, x, y)
|
|
|
|
vec_sub_scalar_impl!(Vec2, u16, Vec2SubRhs, x, y)
|
|
|
|
vec_sub_scalar_impl!(Vec2, u8, Vec2SubRhs, x, y)
|
|
|
|
vec_sub_scalar_impl!(Vec2, i64, Vec2SubRhs, x, y)
|
|
|
|
vec_sub_scalar_impl!(Vec2, i32, Vec2SubRhs, x, y)
|
|
|
|
vec_sub_scalar_impl!(Vec2, i16, Vec2SubRhs, x, y)
|
|
|
|
vec_sub_scalar_impl!(Vec2, i8, Vec2SubRhs, x, y)
|
|
|
|
vec_sub_scalar_impl!(Vec2, uint, Vec2SubRhs, x, y)
|
|
|
|
vec_sub_scalar_impl!(Vec2, int, Vec2SubRhs, x, y)
|
2013-07-22 16:26:20 +08:00
|
|
|
translation_impl!(Vec2)
|
2013-09-15 03:11:43 +08:00
|
|
|
norm_impl!(Vec2, x, y)
|
2013-07-22 16:26:20 +08:00
|
|
|
approx_eq_impl!(Vec2, x, y)
|
2014-01-21 06:40:32 +08:00
|
|
|
one_impl!(Vec2, x, y)
|
2013-07-22 16:26:20 +08:00
|
|
|
from_iterator_impl!(Vec2, iterator, iterator)
|
2014-01-21 06:40:32 +08:00
|
|
|
bounded_impl!(Vec2, x, y)
|
2013-07-22 16:26:20 +08:00
|
|
|
iterable_impl!(Vec2, 2)
|
|
|
|
iterable_mut_impl!(Vec2, 2)
|
|
|
|
to_homogeneous_impl!(Vec2, Vec3, z, x, y)
|
|
|
|
from_homogeneous_impl!(Vec2, Vec3, z, x, y)
|
2013-08-23 22:29:08 +08:00
|
|
|
translate_impl!(Vec2)
|
|
|
|
rotate_impl!(Vec2)
|
|
|
|
transform_impl!(Vec2)
|
2013-07-22 16:26:20 +08:00
|
|
|
|
2013-07-24 22:50:40 +08:00
|
|
|
/// Vector of dimension 3.
|
2014-06-04 04:37:46 +08:00
|
|
|
#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show)]
|
2013-08-05 16:13:44 +08:00
|
|
|
pub struct Vec3<N> {
|
2013-08-05 15:44:56 +08:00
|
|
|
/// First component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub x: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Second component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub y: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Third component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub z: N
|
2013-07-22 16:26:20 +08:00
|
|
|
}
|
|
|
|
|
2013-09-15 03:11:43 +08:00
|
|
|
double_dispatch_binop_decl_trait!(Vec3, Vec3MulRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec3, Vec3DivRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec3, Vec3AddRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec3, Vec3SubRhs)
|
2013-10-10 04:59:44 +08:00
|
|
|
double_dispatch_cast_decl_trait!(Vec3, Vec3Cast)
|
2013-09-15 03:11:43 +08:00
|
|
|
mul_redispatch_impl!(Vec3, Vec3MulRhs)
|
|
|
|
div_redispatch_impl!(Vec3, Vec3DivRhs)
|
|
|
|
add_redispatch_impl!(Vec3, Vec3AddRhs)
|
|
|
|
sub_redispatch_impl!(Vec3, Vec3SubRhs)
|
2013-10-10 04:59:44 +08:00
|
|
|
cast_redispatch_impl!(Vec3, Vec3Cast)
|
2013-07-22 16:26:20 +08:00
|
|
|
new_impl!(Vec3, x, y, z)
|
2013-08-04 16:36:35 +08:00
|
|
|
ord_impl!(Vec3, x, y, z)
|
2013-07-25 05:54:54 +08:00
|
|
|
vec_axis_impl!(Vec3, x, y, z)
|
2013-10-10 04:59:44 +08:00
|
|
|
vec_cast_impl!(Vec3, Vec3Cast, x, y, z)
|
2014-08-16 18:16:26 +08:00
|
|
|
as_slice_impl!(Vec3, 3)
|
2013-07-22 16:26:20 +08:00
|
|
|
indexable_impl!(Vec3, 3)
|
2013-09-13 19:21:42 +08:00
|
|
|
at_fast_impl!(Vec3, 3)
|
2013-07-22 16:26:20 +08:00
|
|
|
new_repeat_impl!(Vec3, val, x, y, z)
|
|
|
|
dim_impl!(Vec3, 3)
|
2013-09-08 23:26:31 +08:00
|
|
|
container_impl!(Vec3)
|
2013-07-22 16:26:20 +08:00
|
|
|
// (specialized) basis_impl!(Vec3, 1)
|
2013-09-15 03:11:43 +08:00
|
|
|
add_impl!(Vec3, Vec3AddRhs, x, y, z)
|
|
|
|
sub_impl!(Vec3, Vec3SubRhs, x, y, z)
|
2013-10-04 00:25:57 +08:00
|
|
|
mul_impl!(Vec3, Vec3MulRhs, x, y, z)
|
|
|
|
div_impl!(Vec3, Vec3DivRhs, x, y, z)
|
2013-07-22 16:26:20 +08:00
|
|
|
neg_impl!(Vec3, x, y, z)
|
|
|
|
dot_impl!(Vec3, x, y, z)
|
2014-05-23 01:54:54 +08:00
|
|
|
vec_mul_scalar_impl!(Vec3, f64, Vec3MulRhs, x, y, z)
|
|
|
|
vec_mul_scalar_impl!(Vec3, f32, Vec3MulRhs, x, y, z)
|
|
|
|
vec_mul_scalar_impl!(Vec3, u64, Vec3MulRhs, x, y, z)
|
|
|
|
vec_mul_scalar_impl!(Vec3, u32, Vec3MulRhs, x, y, z)
|
|
|
|
vec_mul_scalar_impl!(Vec3, u16, Vec3MulRhs, x, y, z)
|
|
|
|
vec_mul_scalar_impl!(Vec3, u8, Vec3MulRhs, x, y, z)
|
|
|
|
vec_mul_scalar_impl!(Vec3, i64, Vec3MulRhs, x, y, z)
|
|
|
|
vec_mul_scalar_impl!(Vec3, i32, Vec3MulRhs, x, y, z)
|
|
|
|
vec_mul_scalar_impl!(Vec3, i16, Vec3MulRhs, x, y, z)
|
|
|
|
vec_mul_scalar_impl!(Vec3, i8, Vec3MulRhs, x, y, z)
|
|
|
|
vec_mul_scalar_impl!(Vec3, uint, Vec3MulRhs, x, y, z)
|
|
|
|
vec_mul_scalar_impl!(Vec3, int, Vec3MulRhs, x, y, z)
|
2013-09-15 03:11:43 +08:00
|
|
|
|
2014-05-23 01:54:54 +08:00
|
|
|
vec_div_scalar_impl!(Vec3, f64, Vec3DivRhs, x, y, z)
|
|
|
|
vec_div_scalar_impl!(Vec3, f32, Vec3DivRhs, x, y, z)
|
|
|
|
vec_div_scalar_impl!(Vec3, u64, Vec3DivRhs, x, y, z)
|
|
|
|
vec_div_scalar_impl!(Vec3, u32, Vec3DivRhs, x, y, z)
|
|
|
|
vec_div_scalar_impl!(Vec3, u16, Vec3DivRhs, x, y, z)
|
|
|
|
vec_div_scalar_impl!(Vec3, u8, Vec3DivRhs, x, y, z)
|
|
|
|
vec_div_scalar_impl!(Vec3, i64, Vec3DivRhs, x, y, z)
|
|
|
|
vec_div_scalar_impl!(Vec3, i32, Vec3DivRhs, x, y, z)
|
|
|
|
vec_div_scalar_impl!(Vec3, i16, Vec3DivRhs, x, y, z)
|
|
|
|
vec_div_scalar_impl!(Vec3, i8, Vec3DivRhs, x, y, z)
|
|
|
|
vec_div_scalar_impl!(Vec3, uint, Vec3DivRhs, x, y, z)
|
|
|
|
vec_div_scalar_impl!(Vec3, int, Vec3DivRhs, x, y, z)
|
2013-09-15 03:11:43 +08:00
|
|
|
|
2014-05-23 01:54:54 +08:00
|
|
|
vec_add_scalar_impl!(Vec3, f64, Vec3AddRhs, x, y, z)
|
|
|
|
vec_add_scalar_impl!(Vec3, f32, Vec3AddRhs, x, y, z)
|
|
|
|
vec_add_scalar_impl!(Vec3, u64, Vec3AddRhs, x, y, z)
|
|
|
|
vec_add_scalar_impl!(Vec3, u32, Vec3AddRhs, x, y, z)
|
|
|
|
vec_add_scalar_impl!(Vec3, u16, Vec3AddRhs, x, y, z)
|
|
|
|
vec_add_scalar_impl!(Vec3, u8, Vec3AddRhs, x, y, z)
|
|
|
|
vec_add_scalar_impl!(Vec3, i64, Vec3AddRhs, x, y, z)
|
|
|
|
vec_add_scalar_impl!(Vec3, i32, Vec3AddRhs, x, y, z)
|
|
|
|
vec_add_scalar_impl!(Vec3, i16, Vec3AddRhs, x, y, z)
|
|
|
|
vec_add_scalar_impl!(Vec3, i8, Vec3AddRhs, x, y, z)
|
|
|
|
vec_add_scalar_impl!(Vec3, uint, Vec3AddRhs, x, y, z)
|
|
|
|
vec_add_scalar_impl!(Vec3, int, Vec3AddRhs, x, y, z)
|
2013-09-15 03:11:43 +08:00
|
|
|
|
2014-05-23 01:54:54 +08:00
|
|
|
vec_sub_scalar_impl!(Vec3, f64, Vec3SubRhs, x, y, z)
|
|
|
|
vec_sub_scalar_impl!(Vec3, f32, Vec3SubRhs, x, y, z)
|
|
|
|
vec_sub_scalar_impl!(Vec3, u64, Vec3SubRhs, x, y, z)
|
|
|
|
vec_sub_scalar_impl!(Vec3, u32, Vec3SubRhs, x, y, z)
|
|
|
|
vec_sub_scalar_impl!(Vec3, u16, Vec3SubRhs, x, y, z)
|
|
|
|
vec_sub_scalar_impl!(Vec3, u8, Vec3SubRhs, x, y, z)
|
|
|
|
vec_sub_scalar_impl!(Vec3, i64, Vec3SubRhs, x, y, z)
|
|
|
|
vec_sub_scalar_impl!(Vec3, i32, Vec3SubRhs, x, y, z)
|
|
|
|
vec_sub_scalar_impl!(Vec3, i16, Vec3SubRhs, x, y, z)
|
|
|
|
vec_sub_scalar_impl!(Vec3, i8, Vec3SubRhs, x, y, z)
|
|
|
|
vec_sub_scalar_impl!(Vec3, uint, Vec3SubRhs, x, y, z)
|
|
|
|
vec_sub_scalar_impl!(Vec3, int, Vec3SubRhs, x, y, z)
|
2013-07-22 16:26:20 +08:00
|
|
|
translation_impl!(Vec3)
|
2013-09-15 03:11:43 +08:00
|
|
|
norm_impl!(Vec3, x, y ,z)
|
2013-07-22 16:26:20 +08:00
|
|
|
approx_eq_impl!(Vec3, x, y, z)
|
2014-01-21 06:40:32 +08:00
|
|
|
one_impl!(Vec3, x, y, z)
|
2013-07-22 16:26:20 +08:00
|
|
|
from_iterator_impl!(Vec3, iterator, iterator, iterator)
|
2014-01-21 06:40:32 +08:00
|
|
|
bounded_impl!(Vec3, x, y, z)
|
2013-07-22 16:26:20 +08:00
|
|
|
iterable_impl!(Vec3, 3)
|
|
|
|
iterable_mut_impl!(Vec3, 3)
|
|
|
|
to_homogeneous_impl!(Vec3, Vec4, w, x, y, z)
|
|
|
|
from_homogeneous_impl!(Vec3, Vec4, w, x, y, z)
|
2013-08-23 22:29:08 +08:00
|
|
|
translate_impl!(Vec3)
|
|
|
|
rotate_impl!(Vec3)
|
|
|
|
transform_impl!(Vec3)
|
2013-07-22 16:26:20 +08:00
|
|
|
|
2013-08-31 17:11:46 +08:00
|
|
|
|
2013-07-24 22:50:40 +08:00
|
|
|
/// Vector of dimension 4.
|
2014-06-04 04:37:46 +08:00
|
|
|
#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show)]
|
2013-08-05 16:13:44 +08:00
|
|
|
pub struct Vec4<N> {
|
2013-08-05 15:44:56 +08:00
|
|
|
/// First component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub x: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Second component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub y: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Third component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub z: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Fourth component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub w: N
|
2013-07-22 16:26:20 +08:00
|
|
|
}
|
|
|
|
|
2013-09-15 03:11:43 +08:00
|
|
|
double_dispatch_binop_decl_trait!(Vec4, Vec4MulRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec4, Vec4DivRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec4, Vec4AddRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec4, Vec4SubRhs)
|
2013-10-10 04:59:44 +08:00
|
|
|
double_dispatch_cast_decl_trait!(Vec4, Vec4Cast)
|
2013-09-15 03:11:43 +08:00
|
|
|
mul_redispatch_impl!(Vec4, Vec4MulRhs)
|
|
|
|
div_redispatch_impl!(Vec4, Vec4DivRhs)
|
|
|
|
add_redispatch_impl!(Vec4, Vec4AddRhs)
|
|
|
|
sub_redispatch_impl!(Vec4, Vec4SubRhs)
|
2013-10-10 04:59:44 +08:00
|
|
|
cast_redispatch_impl!(Vec4, Vec4Cast)
|
2013-07-22 16:26:20 +08:00
|
|
|
new_impl!(Vec4, x, y, z, w)
|
2013-08-04 16:36:35 +08:00
|
|
|
ord_impl!(Vec4, x, y, z, w)
|
2013-07-25 05:54:54 +08:00
|
|
|
vec_axis_impl!(Vec4, x, y, z, w)
|
2013-10-10 04:59:44 +08:00
|
|
|
vec_cast_impl!(Vec4, Vec4Cast, x, y, z, w)
|
2014-08-16 18:16:26 +08:00
|
|
|
as_slice_impl!(Vec4, 4)
|
2013-07-22 16:26:20 +08:00
|
|
|
indexable_impl!(Vec4, 4)
|
2013-09-13 19:21:42 +08:00
|
|
|
at_fast_impl!(Vec4, 4)
|
2013-07-22 16:26:20 +08:00
|
|
|
new_repeat_impl!(Vec4, val, x, y, z, w)
|
|
|
|
dim_impl!(Vec4, 4)
|
2013-09-08 23:26:31 +08:00
|
|
|
container_impl!(Vec4)
|
2013-09-15 03:11:43 +08:00
|
|
|
basis_impl!(Vec4, Vec4MulRhs, 4)
|
|
|
|
add_impl!(Vec4, Vec4AddRhs, x, y, z, w)
|
|
|
|
sub_impl!(Vec4, Vec4SubRhs, x, y, z, w)
|
2013-10-04 00:25:57 +08:00
|
|
|
mul_impl!(Vec4, Vec4MulRhs, x, y, z, w)
|
|
|
|
div_impl!(Vec4, Vec4DivRhs, x, y, z, w)
|
2013-07-22 16:26:20 +08:00
|
|
|
neg_impl!(Vec4, x, y, z, w)
|
|
|
|
dot_impl!(Vec4, x, y, z, w)
|
2014-05-23 01:54:54 +08:00
|
|
|
vec_mul_scalar_impl!(Vec4, f64, Vec4MulRhs, x, y, z, w)
|
|
|
|
vec_mul_scalar_impl!(Vec4, f32, Vec4MulRhs, x, y, z, w)
|
|
|
|
vec_mul_scalar_impl!(Vec4, u64, Vec4MulRhs, x, y, z, w)
|
|
|
|
vec_mul_scalar_impl!(Vec4, u32, Vec4MulRhs, x, y, z, w)
|
|
|
|
vec_mul_scalar_impl!(Vec4, u16, Vec4MulRhs, x, y, z, w)
|
|
|
|
vec_mul_scalar_impl!(Vec4, u8, Vec4MulRhs, x, y, z, w)
|
|
|
|
vec_mul_scalar_impl!(Vec4, i64, Vec4MulRhs, x, y, z, w)
|
|
|
|
vec_mul_scalar_impl!(Vec4, i32, Vec4MulRhs, x, y, z, w)
|
|
|
|
vec_mul_scalar_impl!(Vec4, i16, Vec4MulRhs, x, y, z, w)
|
|
|
|
vec_mul_scalar_impl!(Vec4, i8, Vec4MulRhs, x, y, z, w)
|
|
|
|
vec_mul_scalar_impl!(Vec4, uint, Vec4MulRhs, x, y, z, w)
|
|
|
|
vec_mul_scalar_impl!(Vec4, int, Vec4MulRhs, x, y, z, w)
|
|
|
|
vec_div_scalar_impl!(Vec4, f64, Vec4DivRhs, x, y, z, w)
|
|
|
|
vec_div_scalar_impl!(Vec4, f32, Vec4DivRhs, x, y, z, w)
|
|
|
|
vec_div_scalar_impl!(Vec4, u64, Vec4DivRhs, x, y, z, w)
|
|
|
|
vec_div_scalar_impl!(Vec4, u32, Vec4DivRhs, x, y, z, w)
|
|
|
|
vec_div_scalar_impl!(Vec4, u16, Vec4DivRhs, x, y, z, w)
|
|
|
|
vec_div_scalar_impl!(Vec4, u8, Vec4DivRhs, x, y, z, w)
|
|
|
|
vec_div_scalar_impl!(Vec4, i64, Vec4DivRhs, x, y, z, w)
|
|
|
|
vec_div_scalar_impl!(Vec4, i32, Vec4DivRhs, x, y, z, w)
|
|
|
|
vec_div_scalar_impl!(Vec4, i16, Vec4DivRhs, x, y, z, w)
|
|
|
|
vec_div_scalar_impl!(Vec4, i8, Vec4DivRhs, x, y, z, w)
|
|
|
|
vec_div_scalar_impl!(Vec4, uint, Vec4DivRhs, x, y, z, w)
|
|
|
|
vec_div_scalar_impl!(Vec4, int, Vec4DivRhs, x, y, z, w)
|
|
|
|
vec_add_scalar_impl!(Vec4, f64, Vec4AddRhs, x, y, z, w)
|
|
|
|
vec_add_scalar_impl!(Vec4, f32, Vec4AddRhs, x, y, z, w)
|
|
|
|
vec_add_scalar_impl!(Vec4, u64, Vec4AddRhs, x, y, z, w)
|
|
|
|
vec_add_scalar_impl!(Vec4, u32, Vec4AddRhs, x, y, z, w)
|
|
|
|
vec_add_scalar_impl!(Vec4, u16, Vec4AddRhs, x, y, z, w)
|
|
|
|
vec_add_scalar_impl!(Vec4, u8, Vec4AddRhs, x, y, z, w)
|
|
|
|
vec_add_scalar_impl!(Vec4, i64, Vec4AddRhs, x, y, z, w)
|
|
|
|
vec_add_scalar_impl!(Vec4, i32, Vec4AddRhs, x, y, z, w)
|
|
|
|
vec_add_scalar_impl!(Vec4, i16, Vec4AddRhs, x, y, z, w)
|
|
|
|
vec_add_scalar_impl!(Vec4, i8, Vec4AddRhs, x, y, z, w)
|
|
|
|
vec_add_scalar_impl!(Vec4, uint, Vec4AddRhs, x, y, z, w)
|
|
|
|
vec_add_scalar_impl!(Vec4, int, Vec4AddRhs, x, y, z, w)
|
|
|
|
vec_sub_scalar_impl!(Vec4, f64, Vec4SubRhs, x, y, z, w)
|
|
|
|
vec_sub_scalar_impl!(Vec4, f32, Vec4SubRhs, x, y, z, w)
|
|
|
|
vec_sub_scalar_impl!(Vec4, u64, Vec4SubRhs, x, y, z, w)
|
|
|
|
vec_sub_scalar_impl!(Vec4, u32, Vec4SubRhs, x, y, z, w)
|
|
|
|
vec_sub_scalar_impl!(Vec4, u16, Vec4SubRhs, x, y, z, w)
|
|
|
|
vec_sub_scalar_impl!(Vec4, u8, Vec4SubRhs, x, y, z, w)
|
|
|
|
vec_sub_scalar_impl!(Vec4, i64, Vec4SubRhs, x, y, z, w)
|
|
|
|
vec_sub_scalar_impl!(Vec4, i32, Vec4SubRhs, x, y, z, w)
|
|
|
|
vec_sub_scalar_impl!(Vec4, i16, Vec4SubRhs, x, y, z, w)
|
|
|
|
vec_sub_scalar_impl!(Vec4, i8, Vec4SubRhs, x, y, z, w)
|
|
|
|
vec_sub_scalar_impl!(Vec4, uint, Vec4SubRhs, x, y, z, w)
|
|
|
|
vec_sub_scalar_impl!(Vec4, int, Vec4SubRhs, x, y, z, w)
|
2013-07-22 16:26:20 +08:00
|
|
|
translation_impl!(Vec4)
|
2013-09-15 03:11:43 +08:00
|
|
|
norm_impl!(Vec4, x, y, z, w)
|
2013-07-22 16:26:20 +08:00
|
|
|
approx_eq_impl!(Vec4, x, y, z, w)
|
2014-01-21 06:40:32 +08:00
|
|
|
one_impl!(Vec4, x, y, z, w)
|
2013-07-22 16:26:20 +08:00
|
|
|
from_iterator_impl!(Vec4, iterator, iterator, iterator, iterator)
|
2014-01-21 06:40:32 +08:00
|
|
|
bounded_impl!(Vec4, x, y, z, w)
|
2013-07-22 16:26:20 +08:00
|
|
|
iterable_impl!(Vec4, 4)
|
|
|
|
iterable_mut_impl!(Vec4, 4)
|
|
|
|
to_homogeneous_impl!(Vec4, Vec5, a, x, y, z, w)
|
|
|
|
from_homogeneous_impl!(Vec4, Vec5, a, x, y, z, w)
|
2013-08-23 22:29:08 +08:00
|
|
|
translate_impl!(Vec4)
|
|
|
|
rotate_impl!(Vec4)
|
|
|
|
transform_impl!(Vec4)
|
2013-07-22 16:26:20 +08:00
|
|
|
|
2013-07-24 22:50:40 +08:00
|
|
|
/// Vector of dimension 5.
|
2014-06-04 04:37:46 +08:00
|
|
|
#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show)]
|
2013-08-05 16:13:44 +08:00
|
|
|
pub struct Vec5<N> {
|
2013-08-05 15:44:56 +08:00
|
|
|
/// First component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub x: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Second component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub y: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Third component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub z: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Fourth component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub w: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Fifth of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub a: N
|
2013-07-22 16:26:20 +08:00
|
|
|
}
|
|
|
|
|
2013-09-15 03:11:43 +08:00
|
|
|
double_dispatch_binop_decl_trait!(Vec5, Vec5MulRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec5, Vec5DivRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec5, Vec5AddRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec5, Vec5SubRhs)
|
2013-10-10 04:59:44 +08:00
|
|
|
double_dispatch_cast_decl_trait!(Vec5, Vec5Cast)
|
2013-09-15 03:11:43 +08:00
|
|
|
mul_redispatch_impl!(Vec5, Vec5MulRhs)
|
|
|
|
div_redispatch_impl!(Vec5, Vec5DivRhs)
|
|
|
|
add_redispatch_impl!(Vec5, Vec5AddRhs)
|
|
|
|
sub_redispatch_impl!(Vec5, Vec5SubRhs)
|
2013-10-10 04:59:44 +08:00
|
|
|
cast_redispatch_impl!(Vec5, Vec5Cast)
|
2013-07-22 16:26:20 +08:00
|
|
|
new_impl!(Vec5, x, y, z, w, a)
|
2013-08-04 16:36:35 +08:00
|
|
|
ord_impl!(Vec5, x, y, z, w, a)
|
2013-07-25 05:54:54 +08:00
|
|
|
vec_axis_impl!(Vec5, x, y, z, w, a)
|
2013-10-10 04:59:44 +08:00
|
|
|
vec_cast_impl!(Vec5, Vec5Cast, x, y, z, w, a)
|
2014-08-16 18:16:26 +08:00
|
|
|
as_slice_impl!(Vec5, 5)
|
2013-07-22 16:26:20 +08:00
|
|
|
indexable_impl!(Vec5, 5)
|
2013-09-13 19:21:42 +08:00
|
|
|
at_fast_impl!(Vec5, 5)
|
2013-07-22 16:26:20 +08:00
|
|
|
new_repeat_impl!(Vec5, val, x, y, z, w, a)
|
|
|
|
dim_impl!(Vec5, 5)
|
2013-09-08 23:26:31 +08:00
|
|
|
container_impl!(Vec5)
|
2013-09-15 03:11:43 +08:00
|
|
|
basis_impl!(Vec5, Vec5MulRhs, 5)
|
|
|
|
add_impl!(Vec5, Vec5AddRhs, x, y, z, w, a)
|
|
|
|
sub_impl!(Vec5, Vec5SubRhs, x, y, z, w, a)
|
2013-10-04 00:25:57 +08:00
|
|
|
mul_impl!(Vec5, Vec5MulRhs, x, y, z, w, a)
|
|
|
|
div_impl!(Vec5, Vec5DivRhs, x, y, z, w, a)
|
2013-07-22 16:26:20 +08:00
|
|
|
neg_impl!(Vec5, x, y, z, w, a)
|
|
|
|
dot_impl!(Vec5, x, y, z, w, a)
|
2014-05-23 01:54:54 +08:00
|
|
|
vec_mul_scalar_impl!(Vec5, f64, Vec5MulRhs, x, y, z, w, a)
|
|
|
|
vec_mul_scalar_impl!(Vec5, f32, Vec5MulRhs, x, y, z, w, a)
|
|
|
|
vec_mul_scalar_impl!(Vec5, u64, Vec5MulRhs, x, y, z, w, a)
|
|
|
|
vec_mul_scalar_impl!(Vec5, u32, Vec5MulRhs, x, y, z, w, a)
|
|
|
|
vec_mul_scalar_impl!(Vec5, u16, Vec5MulRhs, x, y, z, w, a)
|
|
|
|
vec_mul_scalar_impl!(Vec5, u8, Vec5MulRhs, x, y, z, w, a)
|
|
|
|
vec_mul_scalar_impl!(Vec5, i64, Vec5MulRhs, x, y, z, w, a)
|
|
|
|
vec_mul_scalar_impl!(Vec5, i32, Vec5MulRhs, x, y, z, w, a)
|
|
|
|
vec_mul_scalar_impl!(Vec5, i16, Vec5MulRhs, x, y, z, w, a)
|
|
|
|
vec_mul_scalar_impl!(Vec5, i8, Vec5MulRhs, x, y, z, w, a)
|
|
|
|
vec_mul_scalar_impl!(Vec5, uint, Vec5MulRhs, x, y, z, w, a)
|
|
|
|
vec_mul_scalar_impl!(Vec5, int, Vec5MulRhs, x, y, z, w, a)
|
|
|
|
vec_div_scalar_impl!(Vec5, f64, Vec5DivRhs, x, y, z, w, a)
|
|
|
|
vec_div_scalar_impl!(Vec5, f32, Vec5DivRhs, x, y, z, w, a)
|
|
|
|
vec_div_scalar_impl!(Vec5, u64, Vec5DivRhs, x, y, z, w, a)
|
|
|
|
vec_div_scalar_impl!(Vec5, u32, Vec5DivRhs, x, y, z, w, a)
|
|
|
|
vec_div_scalar_impl!(Vec5, u16, Vec5DivRhs, x, y, z, w, a)
|
|
|
|
vec_div_scalar_impl!(Vec5, u8, Vec5DivRhs, x, y, z, w, a)
|
|
|
|
vec_div_scalar_impl!(Vec5, i64, Vec5DivRhs, x, y, z, w, a)
|
|
|
|
vec_div_scalar_impl!(Vec5, i32, Vec5DivRhs, x, y, z, w, a)
|
|
|
|
vec_div_scalar_impl!(Vec5, i16, Vec5DivRhs, x, y, z, w, a)
|
|
|
|
vec_div_scalar_impl!(Vec5, i8, Vec5DivRhs, x, y, z, w, a)
|
|
|
|
vec_div_scalar_impl!(Vec5, uint, Vec5DivRhs, x, y, z, w, a)
|
|
|
|
vec_div_scalar_impl!(Vec5, int, Vec5DivRhs, x, y, z, w, a)
|
|
|
|
vec_add_scalar_impl!(Vec5, f64, Vec5AddRhs, x, y, z, w, a)
|
|
|
|
vec_add_scalar_impl!(Vec5, f32, Vec5AddRhs, x, y, z, w, a)
|
|
|
|
vec_add_scalar_impl!(Vec5, u64, Vec5AddRhs, x, y, z, w, a)
|
|
|
|
vec_add_scalar_impl!(Vec5, u32, Vec5AddRhs, x, y, z, w, a)
|
|
|
|
vec_add_scalar_impl!(Vec5, u16, Vec5AddRhs, x, y, z, w, a)
|
|
|
|
vec_add_scalar_impl!(Vec5, u8, Vec5AddRhs, x, y, z, w, a)
|
|
|
|
vec_add_scalar_impl!(Vec5, i64, Vec5AddRhs, x, y, z, w, a)
|
|
|
|
vec_add_scalar_impl!(Vec5, i32, Vec5AddRhs, x, y, z, w, a)
|
|
|
|
vec_add_scalar_impl!(Vec5, i16, Vec5AddRhs, x, y, z, w, a)
|
|
|
|
vec_add_scalar_impl!(Vec5, i8, Vec5AddRhs, x, y, z, w, a)
|
|
|
|
vec_add_scalar_impl!(Vec5, uint, Vec5AddRhs, x, y, z, w, a)
|
|
|
|
vec_add_scalar_impl!(Vec5, int, Vec5AddRhs, x, y, z, w, a)
|
|
|
|
vec_sub_scalar_impl!(Vec5, f64, Vec5SubRhs, x, y, z, w, a)
|
|
|
|
vec_sub_scalar_impl!(Vec5, f32, Vec5SubRhs, x, y, z, w, a)
|
|
|
|
vec_sub_scalar_impl!(Vec5, u64, Vec5SubRhs, x, y, z, w, a)
|
|
|
|
vec_sub_scalar_impl!(Vec5, u32, Vec5SubRhs, x, y, z, w, a)
|
|
|
|
vec_sub_scalar_impl!(Vec5, u16, Vec5SubRhs, x, y, z, w, a)
|
|
|
|
vec_sub_scalar_impl!(Vec5, u8, Vec5SubRhs, x, y, z, w, a)
|
|
|
|
vec_sub_scalar_impl!(Vec5, i64, Vec5SubRhs, x, y, z, w, a)
|
|
|
|
vec_sub_scalar_impl!(Vec5, i32, Vec5SubRhs, x, y, z, w, a)
|
|
|
|
vec_sub_scalar_impl!(Vec5, i16, Vec5SubRhs, x, y, z, w, a)
|
|
|
|
vec_sub_scalar_impl!(Vec5, i8, Vec5SubRhs, x, y, z, w, a)
|
|
|
|
vec_sub_scalar_impl!(Vec5, uint, Vec5SubRhs, x, y, z, w, a)
|
|
|
|
vec_sub_scalar_impl!(Vec5, int, Vec5SubRhs, x, y, z, w, a)
|
2013-07-22 16:26:20 +08:00
|
|
|
translation_impl!(Vec5)
|
2013-09-15 03:11:43 +08:00
|
|
|
norm_impl!(Vec5, x, y, z, w, a)
|
2013-07-22 16:26:20 +08:00
|
|
|
approx_eq_impl!(Vec5, x, y, z, w, a)
|
2014-01-21 06:40:32 +08:00
|
|
|
one_impl!(Vec5, x, y, z, w, a)
|
2013-07-22 16:26:20 +08:00
|
|
|
from_iterator_impl!(Vec5, iterator, iterator, iterator, iterator, iterator)
|
2014-01-21 06:40:32 +08:00
|
|
|
bounded_impl!(Vec5, x, y, z, w, a)
|
2013-07-22 16:26:20 +08:00
|
|
|
iterable_impl!(Vec5, 5)
|
|
|
|
iterable_mut_impl!(Vec5, 5)
|
|
|
|
to_homogeneous_impl!(Vec5, Vec6, b, x, y, z, w, a)
|
|
|
|
from_homogeneous_impl!(Vec5, Vec6, b, x, y, z, w, a)
|
2013-08-23 22:29:08 +08:00
|
|
|
translate_impl!(Vec5)
|
|
|
|
rotate_impl!(Vec5)
|
|
|
|
transform_impl!(Vec5)
|
2013-07-22 16:26:20 +08:00
|
|
|
|
2013-07-24 22:50:40 +08:00
|
|
|
/// Vector of dimension 6.
|
2014-06-04 04:37:46 +08:00
|
|
|
#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show)]
|
2013-08-05 16:13:44 +08:00
|
|
|
pub struct Vec6<N> {
|
2013-08-05 15:44:56 +08:00
|
|
|
/// First component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub x: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Second component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub y: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Third component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub z: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Fourth component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub w: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Fifth of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub a: N,
|
2013-08-05 15:44:56 +08:00
|
|
|
/// Sixth component of the vector.
|
2014-04-02 04:58:06 +08:00
|
|
|
pub b: N
|
2013-07-22 16:26:20 +08:00
|
|
|
}
|
|
|
|
|
2013-09-15 03:11:43 +08:00
|
|
|
double_dispatch_binop_decl_trait!(Vec6, Vec6MulRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec6, Vec6DivRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec6, Vec6AddRhs)
|
|
|
|
double_dispatch_binop_decl_trait!(Vec6, Vec6SubRhs)
|
2013-10-10 04:59:44 +08:00
|
|
|
double_dispatch_cast_decl_trait!(Vec6, Vec6Cast)
|
2013-09-15 03:11:43 +08:00
|
|
|
mul_redispatch_impl!(Vec6, Vec6MulRhs)
|
|
|
|
div_redispatch_impl!(Vec6, Vec6DivRhs)
|
|
|
|
add_redispatch_impl!(Vec6, Vec6AddRhs)
|
|
|
|
sub_redispatch_impl!(Vec6, Vec6SubRhs)
|
2013-10-10 04:59:44 +08:00
|
|
|
cast_redispatch_impl!(Vec6, Vec6Cast)
|
2013-07-22 16:26:20 +08:00
|
|
|
new_impl!(Vec6, x, y, z, w, a, b)
|
2013-08-04 16:36:35 +08:00
|
|
|
ord_impl!(Vec6, x, y, z, w, a, b)
|
2013-07-25 05:54:54 +08:00
|
|
|
vec_axis_impl!(Vec6, x, y, z, w, a, b)
|
2013-10-10 04:59:44 +08:00
|
|
|
vec_cast_impl!(Vec6, Vec6Cast, x, y, z, w, a, b)
|
2014-08-16 18:16:26 +08:00
|
|
|
as_slice_impl!(Vec6, 6)
|
2013-07-22 16:26:20 +08:00
|
|
|
indexable_impl!(Vec6, 6)
|
2013-09-13 19:21:42 +08:00
|
|
|
at_fast_impl!(Vec6, 6)
|
2013-07-22 16:26:20 +08:00
|
|
|
new_repeat_impl!(Vec6, val, x, y, z, w, a, b)
|
|
|
|
dim_impl!(Vec6, 6)
|
2013-09-08 23:26:31 +08:00
|
|
|
container_impl!(Vec6)
|
2013-09-15 03:11:43 +08:00
|
|
|
basis_impl!(Vec6, Vec6MulRhs, 6)
|
|
|
|
add_impl!(Vec6, Vec6AddRhs, x, y, z, w, a, b)
|
|
|
|
sub_impl!(Vec6, Vec6SubRhs, x, y, z, w, a, b)
|
2013-10-04 00:25:57 +08:00
|
|
|
mul_impl!(Vec6, Vec6MulRhs, x, y, z, w, a, b)
|
|
|
|
div_impl!(Vec6, Vec6DivRhs, x, y, z, w, a, b)
|
2013-07-22 16:26:20 +08:00
|
|
|
neg_impl!(Vec6, x, y, z, w, a, b)
|
|
|
|
dot_impl!(Vec6, x, y, z, w, a, b)
|
2014-05-23 01:54:54 +08:00
|
|
|
vec_mul_scalar_impl!(Vec6, f64, Vec6MulRhs, x, y, z, w, a, b)
|
|
|
|
vec_mul_scalar_impl!(Vec6, f32, Vec6MulRhs, x, y, z, w, a, b)
|
|
|
|
vec_mul_scalar_impl!(Vec6, u64, Vec6MulRhs, x, y, z, w, a, b)
|
|
|
|
vec_mul_scalar_impl!(Vec6, u32, Vec6MulRhs, x, y, z, w, a, b)
|
|
|
|
vec_mul_scalar_impl!(Vec6, u16, Vec6MulRhs, x, y, z, w, a, b)
|
|
|
|
vec_mul_scalar_impl!(Vec6, u8, Vec6MulRhs, x, y, z, w, a, b)
|
|
|
|
vec_mul_scalar_impl!(Vec6, i64, Vec6MulRhs, x, y, z, w, a, b)
|
|
|
|
vec_mul_scalar_impl!(Vec6, i32, Vec6MulRhs, x, y, z, w, a, b)
|
|
|
|
vec_mul_scalar_impl!(Vec6, i16, Vec6MulRhs, x, y, z, w, a, b)
|
|
|
|
vec_mul_scalar_impl!(Vec6, i8, Vec6MulRhs, x, y, z, w, a, b)
|
|
|
|
vec_mul_scalar_impl!(Vec6, uint, Vec6MulRhs, x, y, z, w, a, b)
|
|
|
|
vec_mul_scalar_impl!(Vec6, int, Vec6MulRhs, x, y, z, w, a, b)
|
|
|
|
vec_div_scalar_impl!(Vec6, f64, Vec6DivRhs, x, y, z, w, a, b)
|
|
|
|
vec_div_scalar_impl!(Vec6, f32, Vec6DivRhs, x, y, z, w, a, b)
|
|
|
|
vec_div_scalar_impl!(Vec6, u64, Vec6DivRhs, x, y, z, w, a, b)
|
|
|
|
vec_div_scalar_impl!(Vec6, u32, Vec6DivRhs, x, y, z, w, a, b)
|
|
|
|
vec_div_scalar_impl!(Vec6, u16, Vec6DivRhs, x, y, z, w, a, b)
|
|
|
|
vec_div_scalar_impl!(Vec6, u8, Vec6DivRhs, x, y, z, w, a, b)
|
|
|
|
vec_div_scalar_impl!(Vec6, i64, Vec6DivRhs, x, y, z, w, a, b)
|
|
|
|
vec_div_scalar_impl!(Vec6, i32, Vec6DivRhs, x, y, z, w, a, b)
|
|
|
|
vec_div_scalar_impl!(Vec6, i16, Vec6DivRhs, x, y, z, w, a, b)
|
|
|
|
vec_div_scalar_impl!(Vec6, i8, Vec6DivRhs, x, y, z, w, a, b)
|
|
|
|
vec_div_scalar_impl!(Vec6, uint, Vec6DivRhs, x, y, z, w, a, b)
|
|
|
|
vec_div_scalar_impl!(Vec6, int, Vec6DivRhs, x, y, z, w, a, b)
|
|
|
|
vec_add_scalar_impl!(Vec6, f64, Vec6AddRhs, x, y, z, w, a, b)
|
|
|
|
vec_add_scalar_impl!(Vec6, f32, Vec6AddRhs, x, y, z, w, a, b)
|
|
|
|
vec_add_scalar_impl!(Vec6, u64, Vec6AddRhs, x, y, z, w, a, b)
|
|
|
|
vec_add_scalar_impl!(Vec6, u32, Vec6AddRhs, x, y, z, w, a, b)
|
|
|
|
vec_add_scalar_impl!(Vec6, u16, Vec6AddRhs, x, y, z, w, a, b)
|
|
|
|
vec_add_scalar_impl!(Vec6, u8, Vec6AddRhs, x, y, z, w, a, b)
|
|
|
|
vec_add_scalar_impl!(Vec6, i64, Vec6AddRhs, x, y, z, w, a, b)
|
|
|
|
vec_add_scalar_impl!(Vec6, i32, Vec6AddRhs, x, y, z, w, a, b)
|
|
|
|
vec_add_scalar_impl!(Vec6, i16, Vec6AddRhs, x, y, z, w, a, b)
|
|
|
|
vec_add_scalar_impl!(Vec6, i8, Vec6AddRhs, x, y, z, w, a, b)
|
|
|
|
vec_add_scalar_impl!(Vec6, uint, Vec6AddRhs, x, y, z, w, a, b)
|
|
|
|
vec_add_scalar_impl!(Vec6, int, Vec6AddRhs, x, y, z, w, a, b)
|
|
|
|
vec_sub_scalar_impl!(Vec6, f64, Vec6SubRhs, x, y, z, w, a, b)
|
|
|
|
vec_sub_scalar_impl!(Vec6, f32, Vec6SubRhs, x, y, z, w, a, b)
|
|
|
|
vec_sub_scalar_impl!(Vec6, u64, Vec6SubRhs, x, y, z, w, a, b)
|
|
|
|
vec_sub_scalar_impl!(Vec6, u32, Vec6SubRhs, x, y, z, w, a, b)
|
|
|
|
vec_sub_scalar_impl!(Vec6, u16, Vec6SubRhs, x, y, z, w, a, b)
|
|
|
|
vec_sub_scalar_impl!(Vec6, u8, Vec6SubRhs, x, y, z, w, a, b)
|
|
|
|
vec_sub_scalar_impl!(Vec6, i64, Vec6SubRhs, x, y, z, w, a, b)
|
|
|
|
vec_sub_scalar_impl!(Vec6, i32, Vec6SubRhs, x, y, z, w, a, b)
|
|
|
|
vec_sub_scalar_impl!(Vec6, i16, Vec6SubRhs, x, y, z, w, a, b)
|
|
|
|
vec_sub_scalar_impl!(Vec6, i8, Vec6SubRhs, x, y, z, w, a, b)
|
|
|
|
vec_sub_scalar_impl!(Vec6, uint, Vec6SubRhs, x, y, z, w, a, b)
|
|
|
|
vec_sub_scalar_impl!(Vec6, int, Vec6SubRhs, x, y, z, w, a, b)
|
2013-07-22 16:26:20 +08:00
|
|
|
translation_impl!(Vec6)
|
2013-09-15 03:11:43 +08:00
|
|
|
norm_impl!(Vec6, x, y, z, w, a, b)
|
2013-07-22 16:26:20 +08:00
|
|
|
approx_eq_impl!(Vec6, x, y, z, w, a, b)
|
2014-01-21 06:40:32 +08:00
|
|
|
one_impl!(Vec6, x, y, z, w, a, b)
|
2013-07-22 16:26:20 +08:00
|
|
|
from_iterator_impl!(Vec6, iterator, iterator, iterator, iterator, iterator, iterator)
|
2014-01-21 06:40:32 +08:00
|
|
|
bounded_impl!(Vec6, x, y, z, w, a, b)
|
2013-07-22 16:26:20 +08:00
|
|
|
iterable_impl!(Vec6, 6)
|
|
|
|
iterable_mut_impl!(Vec6, 6)
|
2013-08-23 22:29:08 +08:00
|
|
|
translate_impl!(Vec6)
|
|
|
|
rotate_impl!(Vec6)
|
|
|
|
transform_impl!(Vec6)
|