use super::{U1, U2, U4};
impl const From<U2> for U1 {
fn from(val: U2) -> Self {
Self {
b0: val.b0,
}
}
}
impl const From<U1> for U2 {
fn from(val: U1) -> Self {
Self {
b0: val.b0,
b1: false,
}
}
}
impl const From<U4> for U1 {
fn from(val: U4) -> Self {
Self {
b0: val.b0,
}
}
}
impl const From<U1> for U4 {
fn from(val: U1) -> Self {
Self {
b0: val.b0,
b1: false,
b2: false,
b3: false,
}
}
}
impl U1 {
#[must_use]
pub fn to_u2(self) -> U2 {
self.into()
}
#[must_use]
pub fn to_u4(self) -> U4 {
self.into()
}
}
impl U2 {
#[must_use]
pub fn to_u1(self) -> U1 {
self.into()
}
#[must_use]
pub const fn from_u1_pair(high: U1, low: U1) -> Self {
Self {
b0: low.b0,
b1: high.b0,
}
}
#[must_use]
pub const fn split_to_u1_pair(self) -> (U1, U1) {
let high = U1 {
b0: self.b1,
};
let low = U1 {
b0: self.b0,
};
(high, low)
}
}
impl U4 {
#[must_use]
pub fn to_u1(self) -> U1 {
self.into()
}
#[must_use]
pub const fn from_u1_quad(b3: U1, b2: U1, b1: U1, b0: U1) -> Self {
Self {
b0: b0.b0,
b1: b1.b0,
b2: b2.b0,
b3: b3.b0,
}
}
#[must_use]
pub const fn split_to_u1_quad(self) -> (U1, U1, U1, U1) {
let bit3 = U1 {
b0: self.b3,
};
let bit2 = U1 {
b0: self.b2,
};
let bit1 = U1 {
b0: self.b1,
};
let bit0 = U1 {
b0: self.b0,
};
(bit3, bit2, bit1, bit0)
}
}
impl const From<U2> for U4 {
fn from(val: U2) -> Self {
Self {
b0: val.b0,
b1: val.b1,
b2: false,
b3: false,
}
}
}
impl const From<U4> for U2 {
fn from(val: U4) -> Self {
Self {
b0: val.b0,
b1: val.b1,
}
}
}