Trait simba::scalar::SubsetOf

source ·
pub trait SubsetOf<T>: Sized {
    fn to_superset(&self) -> T;
    fn from_superset_unchecked(element: &T) -> Self;
    fn is_in_subset(element: &T) -> bool;

    fn from_superset(element: &T) -> Option<Self> { ... }
}
Expand description

Nested sets and conversions between them (using an injective mapping). Useful to work with substructures. In generic code, it is preferable to use SupersetOf as trait bound whenever possible instead of SubsetOf (because SupersetOf is automatically implemented whenever SubsetOf is).

The notion of “nested sets” is very broad and applies to what the types are supposed to represent, independently from their actual implementation details and limitations. For example:

  • f32 and f64 are both supposed to represent reals and are thus considered equal (even if in practice f64 has more elements).
  • u32 and i8 are respectively supposed to represent natural and relative numbers. Thus, u32 is a subset of i8.
  • A quaternion and a 3x3 orthogonal matrix with unit determinant are both sets of rotations. They can thus be considered equal.

In other words, implementation details due to machine limitations are ignored (otherwise we could not even, e.g., convert a u64 to an i64). If considering those limitations are important, other crates allowing you to query the limitations of given types should be used.

Required Methods§

The inclusion map: converts self to the equivalent element of its superset.

Use with care! Same as self.to_superset but without any property checks. Always succeeds.

Checks if element is actually part of the subset Self (and can be converted to it).

Provided Methods§

The inverse inclusion map: attempts to construct self from the equivalent element of its superset.

Must return None if element has no equivalent in Self.

Implementations on Foreign Types§

Implementors§

impl<T1, T2, R1, C1, R2, C2> SubsetOf<Matrix<T2, R2, C2, <DefaultAllocator as Allocator<T2, R2, C2>>::Buffer>> for OMatrix<T1, R1, C1>where
    R1: Dim,
    C1: Dim,
    R2: Dim,
    C2: Dim,
    T1: Scalar,
    T2: Scalar + SupersetOf<T1>,
    DefaultAllocator: Allocator<T2, R2, C2> + Allocator<T1, R1, C1> + SameShapeAllocator<T1, R1, C1, R2, C2>,
    ShapeConstraint: SameNumberOfRows<R1, R2> + SameNumberOfColumns<C1, C2>,

impl<T1, T2, const D: usize> SubsetOf<Point<T2, D>> for Point<T1, D>where
    T1: Scalar,
    T2: Scalar + SupersetOf<T1>,

impl<T1, T2, const D: usize> SubsetOf<Matrix<T2, <Const<D> as DimNameAdd<Const<1>>>::Output, Const<1>, <DefaultAllocator as Allocator<T2, <Const<D> as DimNameAdd<Const<1>>>::Output, Const<1>>>::Buffer>> for Point<T1, D>where
    Const<D>: DimNameAdd<U1>,
    T1: Scalar,
    T2: Scalar + Zero + One + ClosedDiv + SupersetOf<T1>,
    DefaultAllocator: Allocator<T1, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>>,

impl<T1, T2, const D: usize> SubsetOf<Rotation<T2, D>> for Rotation<T1, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,

impl<T1, T2> SubsetOf<Unit<Quaternion<T2>>> for Rotation3<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,

impl<T1, T2> SubsetOf<Unit<DualQuaternion<T2>>> for Rotation3<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,

impl<T1, T2> SubsetOf<Unit<Complex<T2>>> for Rotation2<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,

impl<T1, T2, R, const D: usize> SubsetOf<Isometry<T2, R, D>> for Rotation<T1, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    R: AbstractRotation<T2, D> + SupersetOf<Self>,

impl<T1, T2, R, const D: usize> SubsetOf<Similarity<T2, R, D>> for Rotation<T1, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    R: AbstractRotation<T2, D> + SupersetOf<Self>,

impl<T1, T2, C, const D: usize> SubsetOf<Transform<T2, C, D>> for Rotation<T1, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    C: SuperTCategoryOf<TAffine>,
    Const<D>: DimNameAdd<U1> + DimMin<Const<D>, Output = Const<D>>,
    DefaultAllocator: Allocator<T1, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,

impl<T1, T2, const D: usize> SubsetOf<Matrix<T2, <Const<D> as DimNameAdd<Const<1>>>::Output, <Const<D> as DimNameAdd<Const<1>>>::Output, <DefaultAllocator as Allocator<T2, <Const<D> as DimNameAdd<Const<1>>>::Output, <Const<D> as DimNameAdd<Const<1>>>::Output>>::Buffer>> for Rotation<T1, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    Const<D>: DimNameAdd<U1> + DimMin<Const<D>, Output = Const<D>>,
    DefaultAllocator: Allocator<T1, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,

impl<T1, T2> SubsetOf<Quaternion<T2>> for Quaternion<T1>where
    T1: Scalar,
    T2: Scalar + SupersetOf<T1>,

impl<T1, T2> SubsetOf<Unit<Quaternion<T2>>> for UnitQuaternion<T1>where
    T1: Scalar,
    T2: Scalar + SupersetOf<T1>,

impl<T1, T2> SubsetOf<Rotation<T2, 3>> for UnitQuaternion<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,

impl<T1, T2, R> SubsetOf<Isometry<T2, R, 3>> for UnitQuaternion<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    R: AbstractRotation<T2, 3> + SupersetOf<Self>,

impl<T1, T2> SubsetOf<Unit<DualQuaternion<T2>>> for UnitQuaternion<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,

impl<T1, T2, R> SubsetOf<Similarity<T2, R, 3>> for UnitQuaternion<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    R: AbstractRotation<T2, 3> + SupersetOf<Self>,

impl<T1, T2, C> SubsetOf<Transform<T2, C, 3>> for UnitQuaternion<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    C: SuperTCategoryOf<TAffine>,

impl<T1: RealField, T2: RealField + SupersetOf<T1>> SubsetOf<Matrix<T2, Const<{ typenum::$D::USIZE }>, Const<{ typenum::$D::USIZE }>, ArrayStorage<T2, 4, 4>>> for UnitQuaternion<T1>

impl<T1, T2> SubsetOf<DualQuaternion<T2>> for DualQuaternion<T1>where
    T1: SimdRealField,
    T2: SimdRealField + SupersetOf<T1>,

impl<T1, T2> SubsetOf<Unit<DualQuaternion<T2>>> for UnitDualQuaternion<T1>where
    T1: SimdRealField,
    T2: SimdRealField + SupersetOf<T1>,

impl<T1, T2> SubsetOf<Isometry<T2, Unit<Quaternion<T2>>, 3>> for UnitDualQuaternion<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,

impl<T1, T2> SubsetOf<Similarity<T2, Unit<Quaternion<T2>>, 3>> for UnitDualQuaternion<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,

impl<T1, T2, C> SubsetOf<Transform<T2, C, 3>> for UnitDualQuaternion<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    C: SuperTCategoryOf<TAffine>,

impl<T1: RealField, T2: RealField + SupersetOf<T1>> SubsetOf<Matrix<T2, Const<{ typenum::$D::USIZE }>, Const<{ typenum::$D::USIZE }>, ArrayStorage<T2, 4, 4>>> for UnitDualQuaternion<T1>

impl<T1, T2> SubsetOf<Unit<Complex<T2>>> for UnitComplex<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,

impl<T1, T2> SubsetOf<Rotation<T2, 2>> for UnitComplex<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,

impl<T1, T2, R> SubsetOf<Isometry<T2, R, 2>> for UnitComplex<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    R: AbstractRotation<T2, 2> + SupersetOf<Self>,

impl<T1, T2, R> SubsetOf<Similarity<T2, R, 2>> for UnitComplex<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    R: AbstractRotation<T2, 2> + SupersetOf<Self>,

impl<T1, T2, C> SubsetOf<Transform<T2, C, 2>> for UnitComplex<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    C: SuperTCategoryOf<TAffine>,

impl<T1: RealField, T2: RealField + SupersetOf<T1>> SubsetOf<Matrix<T2, Const<{ typenum::$D::USIZE }>, Const<{ typenum::$D::USIZE }>, ArrayStorage<T2, 3, 3>>> for UnitComplex<T1>

impl<T1, T2, const D: usize> SubsetOf<Translation<T2, D>> for Translation<T1, D>where
    T1: Scalar,
    T2: Scalar + SupersetOf<T1>,

impl<T1, T2, R, const D: usize> SubsetOf<Isometry<T2, R, D>> for Translation<T1, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    R: AbstractRotation<T2, D>,

impl<T1, T2> SubsetOf<Unit<DualQuaternion<T2>>> for Translation3<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,

impl<T1, T2, R, const D: usize> SubsetOf<Similarity<T2, R, D>> for Translation<T1, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    R: AbstractRotation<T2, D>,

impl<T1, T2, C, const D: usize> SubsetOf<Transform<T2, C, D>> for Translation<T1, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    C: SuperTCategoryOf<TAffine>,
    Const<D>: DimNameAdd<U1>,
    DefaultAllocator: Allocator<T1, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,

impl<T1, T2, const D: usize> SubsetOf<Matrix<T2, <Const<D> as DimNameAdd<Const<1>>>::Output, <Const<D> as DimNameAdd<Const<1>>>::Output, <DefaultAllocator as Allocator<T2, <Const<D> as DimNameAdd<Const<1>>>::Output, <Const<D> as DimNameAdd<Const<1>>>::Output>>::Buffer>> for Translation<T1, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    Const<D>: DimNameAdd<U1>,
    DefaultAllocator: Allocator<T1, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,

impl<T1, T2, R1, R2, const D: usize> SubsetOf<Isometry<T2, R2, D>> for Isometry<T1, R1, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    R1: AbstractRotation<T1, D> + SubsetOf<R2>,
    R2: AbstractRotation<T2, D>,

impl<T1, T2> SubsetOf<Unit<DualQuaternion<T2>>> for Isometry3<T1>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,

impl<T1, T2, R1, R2, const D: usize> SubsetOf<Similarity<T2, R2, D>> for Isometry<T1, R1, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    R1: AbstractRotation<T1, D> + SubsetOf<R2>,
    R2: AbstractRotation<T2, D>,

impl<T1, T2, R, C, const D: usize> SubsetOf<Transform<T2, C, D>> for Isometry<T1, R, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    C: SuperTCategoryOf<TAffine>,
    R: AbstractRotation<T1, D> + SubsetOf<OMatrix<T1, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>> + SubsetOf<OMatrix<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>>,
    Const<D>: DimNameAdd<U1> + DimMin<Const<D>, Output = Const<D>>,
    DefaultAllocator: Allocator<T1, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,

impl<T1, T2, R, const D: usize> SubsetOf<Matrix<T2, <Const<D> as DimNameAdd<Const<1>>>::Output, <Const<D> as DimNameAdd<Const<1>>>::Output, <DefaultAllocator as Allocator<T2, <Const<D> as DimNameAdd<Const<1>>>::Output, <Const<D> as DimNameAdd<Const<1>>>::Output>>::Buffer>> for Isometry<T1, R, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    R: AbstractRotation<T1, D> + SubsetOf<OMatrix<T1, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>> + SubsetOf<OMatrix<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>>,
    Const<D>: DimNameAdd<U1> + DimMin<Const<D>, Output = Const<D>>,
    DefaultAllocator: Allocator<T1, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,

impl<T1, T2, R1, R2, const D: usize> SubsetOf<Similarity<T2, R2, D>> for Similarity<T1, R1, D>where
    T1: RealField + SubsetOf<T2>,
    T2: RealField + SupersetOf<T1>,
    R1: AbstractRotation<T1, D> + SubsetOf<R2>,
    R2: AbstractRotation<T2, D>,

impl<T1, T2, R, C, const D: usize> SubsetOf<Transform<T2, C, D>> for Similarity<T1, R, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    C: SuperTCategoryOf<TAffine>,
    R: AbstractRotation<T1, D> + SubsetOf<OMatrix<T1, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>> + SubsetOf<OMatrix<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>>,
    Const<D>: DimNameAdd<U1> + DimMin<Const<D>, Output = Const<D>>,
    DefaultAllocator: Allocator<T1, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,

impl<T1, T2, R, const D: usize> SubsetOf<Matrix<T2, <Const<D> as DimNameAdd<Const<1>>>::Output, <Const<D> as DimNameAdd<Const<1>>>::Output, <DefaultAllocator as Allocator<T2, <Const<D> as DimNameAdd<Const<1>>>::Output, <Const<D> as DimNameAdd<Const<1>>>::Output>>::Buffer>> for Similarity<T1, R, D>where
    T1: RealField,
    T2: RealField + SupersetOf<T1>,
    R: AbstractRotation<T1, D> + SubsetOf<OMatrix<T1, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>> + SubsetOf<OMatrix<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>>,
    Const<D>: DimNameAdd<U1> + DimMin<Const<D>, Output = Const<D>>,
    DefaultAllocator: Allocator<T1, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,

impl<T1, T2, C1, C2, const D: usize> SubsetOf<Transform<T2, C2, D>> for Transform<T1, C1, D>where
    T1: RealField + SubsetOf<T2>,
    T2: RealField,
    C1: TCategory,
    C2: SuperTCategoryOf<C1>,
    Const<D>: DimNameAdd<U1>,
    DefaultAllocator: Allocator<T1, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,
    T1::Epsilon: Copy,
    T2::Epsilon: Copy,

impl<T1, T2, C, const D: usize> SubsetOf<Matrix<T2, <Const<D> as DimNameAdd<Const<1>>>::Output, <Const<D> as DimNameAdd<Const<1>>>::Output, <DefaultAllocator as Allocator<T2, <Const<D> as DimNameAdd<Const<1>>>::Output, <Const<D> as DimNameAdd<Const<1>>>::Output>>::Buffer>> for Transform<T1, C, D>where
    T1: RealField + SubsetOf<T2>,
    T2: RealField,
    C: TCategory,
    Const<D>: DimNameAdd<U1>,
    DefaultAllocator: Allocator<T1, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<T2, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,
    T1::Epsilon: Copy,
    T2::Epsilon: Copy,