use crate::{FloatScalar, SignedScalar, bindings, scalar::IntScalar};
use super::Scalar;
pub trait Unit: 'static {
type Scalar: Scalar + crate::traits::marker::Facet<'static>;
}
pub trait IntUnit:
Unit<
Scalar: IntScalar<
Vec2: bindings::IntegerVector,
Vec3: bindings::IntegerVector,
Vec4: bindings::IntegerVector,
>,
>
{
}
impl<T> IntUnit for T where
T: Unit<
Scalar: IntScalar<
Vec2: bindings::IntegerVector,
Vec3: bindings::IntegerVector,
Vec4: bindings::IntegerVector,
>,
>
{
}
pub trait SignedUnit: Unit<Scalar: SignedScalar> {}
impl<T> SignedUnit for T where T: Unit<Scalar: SignedScalar> {}
pub trait FloatUnit: Unit<Scalar: FloatScalar> {}
impl<T> FloatUnit for T where T: Unit<Scalar: FloatScalar> {}
impl Unit for f32 {
type Scalar = f32;
}
impl Unit for f64 {
type Scalar = f64;
}
impl Unit for i8 {
type Scalar = i8;
}
impl Unit for i16 {
type Scalar = i16;
}
impl Unit for i32 {
type Scalar = i32;
}
impl Unit for u8 {
type Scalar = u8;
}
impl Unit for u16 {
type Scalar = u16;
}
impl Unit for u32 {
type Scalar = u32;
}
impl Unit for i64 {
type Scalar = i64;
}
impl Unit for u64 {
type Scalar = u64;
}