1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
use approx::ApproxEq; use alga::general::{SubsetOf, Field}; use core::{Scalar, SquareMatrix}; use core::dimension::{DimName, DimNameAdd, DimNameSum, U1}; use core::storage::OwnedStorage; use core::allocator::OwnedAllocator; use geometry::{TransformBase, TCategory, SuperTCategoryOf}; impl<N1, N2, D: DimName, SA, SB, C1, C2> SubsetOf<TransformBase<N2, D, SB, C2>> for TransformBase<N1, D, SA, C1> where N1: Scalar + Field + ApproxEq + SubsetOf<N2>, N2: Scalar + Field + ApproxEq, C1: TCategory, C2: SuperTCategoryOf<C1>, D: DimNameAdd<U1>, SA: OwnedStorage<N1, DimNameSum<D, U1>, DimNameSum<D, U1>>, SB: OwnedStorage<N2, DimNameSum<D, U1>, DimNameSum<D, U1>>, SA::Alloc: OwnedAllocator<N1, DimNameSum<D, U1>, DimNameSum<D, U1>, SA>, SB::Alloc: OwnedAllocator<N2, DimNameSum<D, U1>, DimNameSum<D, U1>, SB>, N1::Epsilon: Copy, N2::Epsilon: Copy { #[inline] fn to_superset(&self) -> TransformBase<N2, D, SB, C2> { TransformBase::from_matrix_unchecked(self.to_homogeneous().to_superset()) } #[inline] fn is_in_subset(t: &TransformBase<N2, D, SB, C2>) -> bool { <Self as SubsetOf<_>>::is_in_subset(t.matrix()) } #[inline] unsafe fn from_superset_unchecked(t: &TransformBase<N2, D, SB, C2>) -> Self { Self::from_superset_unchecked(t.matrix()) } } impl<N1, N2, D: DimName, SA, SB, C> SubsetOf<SquareMatrix<N2, DimNameSum<D, U1>, SB>> for TransformBase<N1, D, SA, C> where N1: Scalar + Field + ApproxEq + SubsetOf<N2>, N2: Scalar + Field + ApproxEq, C: TCategory, D: DimNameAdd<U1>, SA: OwnedStorage<N1, DimNameSum<D, U1>, DimNameSum<D, U1>>, SB: OwnedStorage<N2, DimNameSum<D, U1>, DimNameSum<D, U1>>, SA::Alloc: OwnedAllocator<N1, DimNameSum<D, U1>, DimNameSum<D, U1>, SA>, SB::Alloc: OwnedAllocator<N2, DimNameSum<D, U1>, DimNameSum<D, U1>, SB>, N1::Epsilon: Copy, N2::Epsilon: Copy { #[inline] fn to_superset(&self) -> SquareMatrix<N2, DimNameSum<D, U1>, SB> { self.matrix().to_superset() } #[inline] fn is_in_subset(m: &SquareMatrix<N2, DimNameSum<D, U1>, SB>) -> bool { C::check_homogeneous_invariants(m) } #[inline] unsafe fn from_superset_unchecked(m: &SquareMatrix<N2, DimNameSum<D, U1>, SB>) -> Self { TransformBase::from_matrix_unchecked(::convert_ref_unchecked(m)) } }