use std::any::Any; use std::any::TypeId; use std::fmt::Debug; /// The basic scalar type for all structures of `nalgebra`. /// /// This does not make any assumption on the algebraic properties of `Self`. pub trait Scalar: PartialEq + Debug + Any { #[inline] /// Tests if `Self` the same as the type `T` /// /// Typically used to test of `Self` is a f32 or a f64 with `N::is::()`. fn is() -> bool { TypeId::of::() == TypeId::of::() } #[inline(always)] /// Performance hack: Clone doesn't get inlined for Copy types in debug mode, so make it inline anyway. /// /// Downstream crates need to implement this on any Clone Scalars, as a blanket impl would conflict with with the blanket Copy impl. fn inlined_clone(&self) -> Self; } impl Scalar for T { #[inline(always)] fn inlined_clone(&self) -> T { *self } }