Decouple vec module from Point2 and Point3

This commit is contained in:
Brendan Zabarauskas 2013-07-12 16:36:36 +10:00
parent 7615a55d84
commit ad59c9b16f
3 changed files with 37 additions and 42 deletions

View file

@ -13,12 +13,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#[cfg(geom)]
use std::cast;
use core::{Dimensional, Swap};
#[cfg(geom)]
use geom::{Point2, Point3};
#[deriving(Clone, Eq)]
pub struct Vec2<T> { x: T, y: T }
@ -66,24 +61,6 @@ impl<T> Vec2<T> {
}
}
#[cfg(geom)]
impl<T> Vec2<T> {
#[inline]
pub fn from_point(point: Point2<T>) -> Vec2<T> {
unsafe { cast::transmute(point) }
}
#[inline]
pub fn as_point<'a>(&'a self) -> &'a Point2<T> {
unsafe { cast::transmute(self) }
}
#[inline]
pub fn as_mut_point<'a>(&'a mut self) -> &'a mut Point2<T> {
unsafe { cast::transmute(self) }
}
}
impl<T:Clone> Vec2<T> {
#[inline]
pub fn from_value(value: T) -> Vec2<T> {
@ -588,24 +565,6 @@ impl<T> Vec3<T> {
}
}
#[cfg(geom)]
impl<T> Vec3<T> {
#[inline]
pub fn from_point(point: Point3<T>) -> Vec3<T> {
unsafe { cast::transmute(point) }
}
#[inline]
pub fn as_point<'a>(&'a self) -> &'a Point3<T> {
unsafe { cast::transmute(self) }
}
#[inline]
pub fn as_mut_point<'a>(&'a mut self) -> &'a mut Point3<T> {
unsafe { cast::transmute(self) }
}
}
impl<T:Clone> Vec3<T> {
#[inline]
pub fn from_value(value: T) -> Vec3<T> {

View file

@ -16,7 +16,9 @@
pub use self::aabb::{AABB2, AABB3};
pub use self::frustum::{Frustum, FrustumPoints};
pub use self::plane::Plane3;
pub use self::point::{Point, Point2, Point3};
pub use self::point::Point;
pub use self::point::{Point2, AsPoint2};
pub use self::point::{Point3, AsPoint3};
pub use self::ray::{Ray2, Ray3};
pub use self::sphere::Sphere;

View file

@ -52,6 +52,23 @@ impl_dimensional!(Point2, T, 2)
impl_swap!(Point2)
impl_approx!(Point2 { x, y })
pub trait AsPoint2<T> {
pub fn as_point2<'a>(&'a self) -> &'a Point2<T>;
pub fn as_mut_point2<'a>(&'a mut self) -> &'a mut Point2<T>;
}
impl<T:Clone + Num> AsPoint2<T> for Vec2<T> {
#[inline]
pub fn as_point2<'a>(&'a self) -> &'a Point2<T> {
unsafe { cast::transmute(self) }
}
#[inline]
pub fn as_mut_point2<'a>(&'a mut self) -> &'a mut Point2<T> {
unsafe { cast::transmute(self) }
}
}
impl<T:Num> Point2<T> {
#[inline]
pub fn new(x: T, y: T) -> Point2<T> {
@ -192,6 +209,23 @@ impl_dimensional!(Point3, T, 3)
impl_swap!(Point3)
impl_approx!(Point3 { x, y, z })
pub trait AsPoint3<T> {
pub fn as_point3<'a>(&'a self) -> &'a Point3<T>;
pub fn as_mut_point3<'a>(&'a mut self) -> &'a mut Point3<T>;
}
impl<T:Clone + Num> AsPoint3<T> for Vec3<T> {
#[inline]
pub fn as_point3<'a>(&'a self) -> &'a Point3<T> {
unsafe { cast::transmute(self) }
}
#[inline]
pub fn as_mut_point3<'a>(&'a mut self) -> &'a mut Point3<T> {
unsafe { cast::transmute(self) }
}
}
impl<T:Num> Point3<T> {
#[inline]
pub fn new(x: T, y: T, z: T) -> Point3<T> {