use super::{Quantity, fmt::UnitDisplay};
use crate::{
dimension::{Dimensionless, Dimensions},
scalar::Scalar,
unit::{Unit, UnitDef},
};
use core::marker::PhantomData;
impl<S: Scalar, D: Dimensions> From<S> for Quantity<S, D> {
#[inline(always)]
fn from(value: S) -> Self {
Self::from_base(value)
}
}
#[cfg(feature = "f32")]
impl From<Quantity<f32, Dimensionless>> for f32 {
#[inline(always)]
fn from(q: Quantity<f32, Dimensionless>) -> Self {
q.value
}
}
#[cfg(feature = "f64")]
impl From<Quantity<f64, Dimensionless>> for f64 {
#[inline(always)]
fn from(q: Quantity<f64, Dimensionless>) -> Self {
q.value
}
}
#[cfg(feature = "f32")]
impl<D: Dimensions> Quantity<f32, D> {
#[inline(always)]
pub const fn from_f32(value: f32) -> Self {
Self::from_base(value)
}
#[inline(always)]
pub const fn new<M: UnitDef<Dim = D>>(value: f32, _unit: Unit<M>) -> Self {
Self::from_base(crate::scalar::to_base_f32(
value,
M::SCALE_NUM,
M::SCALE_DEN,
M::OFFSET_NUM,
M::OFFSET_DEN,
))
}
#[inline(always)]
pub const fn to<M: UnitDef<Dim = D>>(self, _unit: Unit<M>) -> f32 {
crate::scalar::from_base_f32(
self.value,
M::SCALE_NUM,
M::SCALE_DEN,
M::OFFSET_NUM,
M::OFFSET_DEN,
)
}
#[inline(always)]
pub const fn display_as<M: UnitDef<Dim = D>>(self, _unit: Unit<M>) -> UnitDisplay<f32, M> {
UnitDisplay {
value: self.value,
_phantom: PhantomData,
}
}
}
#[cfg(feature = "f64")]
impl<D: Dimensions> Quantity<f64, D> {
#[inline(always)]
pub const fn from_f64(value: f64) -> Self {
Self::from_base(value)
}
#[inline(always)]
pub const fn new<M: UnitDef<Dim = D>>(value: f64, _unit: Unit<M>) -> Self {
Self::from_base(crate::scalar::to_base_f64(
value,
M::SCALE_NUM,
M::SCALE_DEN,
M::OFFSET_NUM,
M::OFFSET_DEN,
))
}
#[inline(always)]
pub const fn to<M: UnitDef<Dim = D>>(self, _unit: Unit<M>) -> f64 {
crate::scalar::from_base_f64(
self.value,
M::SCALE_NUM,
M::SCALE_DEN,
M::OFFSET_NUM,
M::OFFSET_DEN,
)
}
#[inline(always)]
pub const fn display_as<M: UnitDef<Dim = D>>(self, _unit: Unit<M>) -> UnitDisplay<f64, M> {
UnitDisplay {
value: self.value,
_phantom: PhantomData,
}
}
}