Udated to latest Rust: TotalOrd/min/max changes

This commit is contained in:
ozkriff 2014-03-17 15:13:54 +04:00
parent ba9aa12072
commit 385c3d7de8
2 changed files with 11 additions and 10 deletions

View file

@ -21,7 +21,9 @@ use array::build;
use std::fmt;
use std::num::{zero, one};
use std::iter::Iterator;
use std::cmp::{max, min};
fn _min<S: Ord>(a: S, b: S) -> S { if a < b { a } else { b }}
fn _max<S: Ord>(a: S, b: S) -> S { if a > b { a } else { b }}
pub trait Aabb
<
@ -49,8 +51,8 @@ pub trait Aabb
// Returns a new AABB that is grown to include the given point.
fn grow(&self, p: &P) -> Self {
let min : P = build(|i| min(self.min().i(i).clone(), p.i(i).clone()));
let max : P = build(|i| max(self.max().i(i).clone(), p.i(i).clone()));
let min : P = build(|i| _min(*self.min().i(i), *p.i(i)));
let max : P = build(|i| _max(*self.max().i(i), *p.i(i)));
Aabb::new(min, max)
}
@ -81,8 +83,8 @@ impl<S: Num + Ord + Clone> Aabb2<S> {
#[inline]
pub fn new(p1: Point2<S>, p2: Point2<S>) -> Aabb2<S> {
Aabb2 {
min: Point2::new(min(p1.x.clone(), p2.x.clone()), min(p1.y.clone(), p2.y.clone())),
max: Point2::new(max(p1.x.clone(), p2.x.clone()), max(p1.y.clone(), p2.y.clone())),
min: Point2::new(_min(p1.x.clone(), p2.x.clone()), _min(p1.y.clone(), p2.y.clone())),
max: Point2::new(_max(p1.x.clone(), p2.x.clone()), _max(p1.y.clone(), p2.y.clone())),
}
}
}
@ -110,8 +112,8 @@ impl<S: Num + Ord + Clone> Aabb3<S> {
#[inline]
pub fn new(p1: Point3<S>, p2: Point3<S>) -> Aabb3<S> {
Aabb3 {
min: Point3::new(min(p1.x.clone(), p2.x.clone()), min(p1.y.clone(), p2.y.clone()), min(p1.z.clone(), p2.z.clone())),
max: Point3::new(max(p1.x.clone(), p2.x.clone()), max(p1.y.clone(), p2.y.clone()), max(p1.z.clone(), p2.z.clone())),
min: Point3::new(_min(p1.x.clone(), p2.x.clone()), _min(p1.y.clone(), p2.y.clone()), _min(p1.z.clone(), p2.z.clone())),
max: Point3::new(_max(p1.x.clone(), p2.x.clone()), _max(p1.y.clone(), p2.y.clone()), _max(p1.z.clone(), p2.z.clone())),
}
}
}

View file

@ -15,7 +15,6 @@
use std::fmt;
use std::num::{Zero, zero, One, one, sqrt};
use std::cmp::{max, min};
use angle::{Rad, atan2, acos};
use approx::ApproxEq;
@ -69,10 +68,10 @@ pub trait Vector
#[inline] fn dot(&self, other: &Self) -> S { self.mul_v(other).comp_add() }
/// The minimum component of the vector.
#[inline] fn comp_min(&self) -> S { self.fold(|a, b| min(a.clone(), b.clone())) }
#[inline] fn comp_min(&self) -> S { self.fold(|a, b| if *a < *b { *a } else {*b }) }
/// The maximum component of the vector.
#[inline] fn comp_max(&self) -> S { self.fold(|a, b| max(a.clone(), b.clone())) }
#[inline] fn comp_max(&self) -> S { self.fold(|a, b| if *a > *b { *a } else {*b }) }
}
#[inline] pub fn dot<S: Primitive, Slice, V: Vector<S, Slice>>(a: V, b: V) -> S { a.dot(&b) }