use crate::prelude::common::*;
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum Sample {
F16(f16),
F32(f32),
U32(u32)
}
impl Sample {
pub fn default_alpha() -> Self {
Sample::F32(1.0)
}
#[inline]
pub fn to_f16(&self) -> f16 {
match *self {
Sample::F16(sample) => sample,
Sample::F32(sample) => f16::from_f32(sample),
Sample::U32(sample) => f16::from_f32(sample as f32),
}
}
#[inline]
pub fn to_f32(&self) -> f32 {
match *self {
Sample::F32(sample) => sample,
Sample::F16(sample) => sample.to_f32(),
Sample::U32(sample) => sample as f32,
}
}
#[inline]
pub fn to_u32(&self) -> u32 {
match *self {
Sample::F16(sample) => sample.to_f32() as u32,
Sample::F32(sample) => sample as u32,
Sample::U32(sample) => sample,
}
}
}
impl From<f16> for Sample { #[inline] fn from(f: f16) -> Self { Sample::F16(f) } }
impl From<f32> for Sample { #[inline] fn from(f: f32) -> Self { Sample::F32(f) } }
impl From<u32> for Sample { #[inline] fn from(f: u32) -> Self { Sample::U32(f) } }
impl From<Sample> for f16 { #[inline] fn from(s: Sample) -> Self { s.to_f16() } }
impl From<Sample> for f32 { #[inline] fn from(s: Sample) -> Self { s.to_f32() } }
impl From<Sample> for u32 { #[inline] fn from(s: Sample) -> Self { s.to_u32() } }