Skip to content

Commit

Permalink
Remove implementations of Rotation, Translation and `Transformati…
Browse files Browse the repository at this point in the history
…on` for the `Identity` type.

Because most of their methods did not make sence for the (constant) identity matrix, they were set
to `panic!` at runtime whenever the user tried to use them. Instead, it is much safer to completely
forbid their use by removing the related trait implementation.

See dimforge/ncollide#87.
  • Loading branch information
sebcrozet committed Jul 7, 2015
1 parent 705a969 commit c13b038
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 115 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ bench:
cargo bench

doc:
cargo doc
cargo doc --no-deps

clean:
cargo clean
Expand Down
116 changes: 2 additions & 114 deletions src/structs/spec/identity.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
use std::ops::Mul;
use num::{Zero, One};
use num::One;
use structs::mat;
use traits::operations::{Inv, Transpose};
use traits::geometry::{Translation, Translate, Rotation, Rotate, Transformation, Transform,
AbsoluteRotate};
use traits::geometry::{Translate, Rotate, Transform, AbsoluteRotate};

impl One for mat::Identity {
#[inline]
Expand Down Expand Up @@ -42,43 +41,6 @@ impl Transpose for mat::Identity {
}
}

impl<V: Zero> Translation<V> for mat::Identity {
#[inline]
fn translation(&self) -> V {
::zero()
}

#[inline]
fn inv_translation(&self) -> V {
::zero()
}

#[inline]
fn append_translation_mut(&mut self, _: &V) {
panic!("Attempted to translate the identity matrix.")
}

#[inline]
fn append_translation(&self, _: &V) -> mat::Identity {
panic!("Attempted to translate the identity matrix.")
}

#[inline]
fn prepend_translation_mut(&mut self, _: &V) {
panic!("Attempted to translate the identity matrix.")
}

#[inline]
fn prepend_translation(&self, _: &V) -> mat::Identity {
panic!("Attempted to translate the identity matrix.")
}

#[inline]
fn set_translation(&mut self, _: V) {
panic!("Attempted to translate the identity matrix.")
}
}

impl<V: Clone> Translate<V> for mat::Identity {
#[inline]
fn translate(&self, v: &V) -> V {
Expand All @@ -91,43 +53,6 @@ impl<V: Clone> Translate<V> for mat::Identity {
}
}

impl<V: Zero> Rotation<V> for mat::Identity {
#[inline]
fn rotation(&self) -> V {
::zero()
}

#[inline]
fn inv_rotation(&self) -> V {
::zero()
}

#[inline]
fn append_rotation_mut(&mut self, _: &V) {
panic!("Attempted to rotate the identity matrix.")
}

#[inline]
fn append_rotation(&self, _: &V) -> mat::Identity {
panic!("Attempted to rotate the identity matrix.")
}

#[inline]
fn prepend_rotation_mut(&mut self, _: &V) {
panic!("Attempted to rotate the identity matrix.")
}

#[inline]
fn prepend_rotation(&self, _: &V) -> mat::Identity {
panic!("Attempted to rotate the identity matrix.")
}

#[inline]
fn set_rotation(&mut self, _: V) {
panic!("Attempted to rotate the identity matrix.")
}
}

impl<V: Clone> Rotate<V> for mat::Identity {
#[inline]
fn rotate(&self, v: &V) -> V {
Expand All @@ -147,43 +72,6 @@ impl<V: Clone> AbsoluteRotate<V> for mat::Identity {
}
}

impl<M: One> Transformation<M> for mat::Identity {
#[inline]
fn transformation(&self) -> M {
::one()
}

#[inline]
fn inv_transformation(&self) -> M {
::one()
}

#[inline]
fn append_transformation_mut(&mut self, _: &M) {
panic!("Attempted to transform the identity matrix.")
}

#[inline]
fn append_transformation(&self, _: &M) -> mat::Identity {
panic!("Attempted to transform the identity matrix.")
}

#[inline]
fn prepend_transformation_mut(&mut self, _: &M) {
panic!("Attempted to transform the identity matrix.")
}

#[inline]
fn prepend_transformation(&self, _: &M) -> mat::Identity {
panic!("Attempted to transform the identity matrix.")
}

#[inline]
fn set_transformation(&mut self, _: M) {
panic!("Attempted to transform the identity matrix.")
}
}

impl<V: Clone> Transform<V> for mat::Identity {
#[inline]
fn transform(&self, v: &V) -> V {
Expand Down

0 comments on commit c13b038

Please sign in to comment.