some renaming
This commit is contained in:
parent
774635a208
commit
62781ba14d
|
@ -17,7 +17,7 @@ use std::cmp::Ordering;
|
|||
use std::fmt::{Binary, Debug, Display, Formatter, LowerHex, Octal, Result as FmtResult, UpperHex};
|
||||
use std::str;
|
||||
use typenum::Unsigned;
|
||||
use FixedNum;
|
||||
use FixedHelper;
|
||||
|
||||
use {
|
||||
FixedI128, FixedI16, FixedI32, FixedI64, FixedI8, FixedU128, FixedU16, FixedU32, FixedU64,
|
||||
|
@ -62,7 +62,7 @@ radix2! { UpHex(4, "0x"), 0..=9 => b'0', 10..=15 => b'A' - 10 }
|
|||
|
||||
fn fmt_radix2<Frac: Unsigned, F, R>(num: F, _radix: R, fmt: &mut Formatter) -> FmtResult
|
||||
where
|
||||
F: FixedNum<Frac>,
|
||||
F: FixedHelper<Frac>,
|
||||
R: Radix2,
|
||||
{
|
||||
let digit_bits: u32 = R::BITS.into();
|
||||
|
@ -185,7 +185,7 @@ fn dec_frac_digits(frac_bits: u32) -> u32 {
|
|||
|
||||
fn fmt_dec<Frac: Unsigned, F>(num: F, fmt: &mut Formatter) -> FmtResult
|
||||
where
|
||||
F: FixedNum<Frac>,
|
||||
F: FixedHelper<Frac>,
|
||||
{
|
||||
let (int_bits, frac_bits) = (F::int_bits(), F::frac_bits());
|
||||
let (is_neg, mut int, mut frac) = num.parts();
|
||||
|
|
|
@ -22,14 +22,18 @@ use {
|
|||
FixedU8,
|
||||
};
|
||||
|
||||
pub(crate) trait FixedNum<Frac: Unsigned>: Sized {
|
||||
pub(crate) trait FixedHelper<Frac: Unsigned>: Sized {
|
||||
type Part;
|
||||
fn one() -> Option<Self>;
|
||||
fn minus_one() -> Option<Self>;
|
||||
fn parts(self) -> (bool, Self::Part, Self::Part);
|
||||
#[inline(always)]
|
||||
fn bits() -> u32 {
|
||||
mem::size_of::<Self::Part>() as u32 * 8
|
||||
}
|
||||
#[inline(always)]
|
||||
fn int_bits() -> u32 {
|
||||
mem::size_of::<Self::Part>() as u32 * 8 - Self::frac_bits()
|
||||
Self::bits() - Self::frac_bits()
|
||||
}
|
||||
#[inline(always)]
|
||||
fn frac_bits() -> u32 {
|
||||
|
@ -45,7 +49,7 @@ pub(crate) trait FixedNum<Frac: Unsigned>: Sized {
|
|||
|
||||
macro_rules! fixed_num_common {
|
||||
($Fixed:ident($Part:ty); $($rem:tt)+) => {
|
||||
impl<Frac: Unsigned> FixedNum<Frac> for $Fixed<Frac> {
|
||||
impl<Frac: Unsigned> FixedHelper<Frac> for $Fixed<Frac> {
|
||||
type Part = $Part;
|
||||
|
||||
$($rem)+
|
||||
|
@ -60,7 +64,7 @@ macro_rules! fixed_num_common {
|
|||
|
||||
#[inline]
|
||||
fn take_frac_digit(frac_part: &mut $Part, digit_bits: u32) -> u8 {
|
||||
let rem_bits = mem::size_of::<$Part>() as u32 * 8 - digit_bits;
|
||||
let rem_bits = <$Fixed<Frac> as FixedHelper<Frac>>::bits() - digit_bits;
|
||||
let mask = !0 << rem_bits;
|
||||
let ret = ((*frac_part & mask) >> rem_bits) as u8;
|
||||
*frac_part <<= digit_bits;
|
||||
|
@ -103,8 +107,8 @@ macro_rules! fixed_num_unsigned {
|
|||
|
||||
#[inline]
|
||||
fn one() -> Option<Self> {
|
||||
let int_bits = <$Fixed<Frac> as FixedNum<Frac>>::int_bits();
|
||||
let frac_bits = <$Fixed<Frac> as FixedNum<Frac>>::frac_bits();
|
||||
let int_bits = <$Fixed<Frac> as FixedHelper<Frac>>::int_bits();
|
||||
let frac_bits = <$Fixed<Frac> as FixedHelper<Frac>>::frac_bits();
|
||||
if int_bits < 1 {
|
||||
None
|
||||
} else {
|
||||
|
@ -120,8 +124,8 @@ macro_rules! fixed_num_unsigned {
|
|||
#[inline]
|
||||
fn parts(self) -> (bool, $Part, $Part) {
|
||||
let bits = self.to_bits();
|
||||
let int_bits = <$Fixed<Frac> as FixedNum<Frac>>::int_bits();
|
||||
let frac_bits = <$Fixed<Frac> as FixedNum<Frac>>::frac_bits();
|
||||
let int_bits = <$Fixed<Frac> as FixedHelper<Frac>>::int_bits();
|
||||
let frac_bits = <$Fixed<Frac> as FixedHelper<Frac>>::frac_bits();
|
||||
let int_part = if int_bits == 0 { 0 } else { bits >> frac_bits };
|
||||
let frac_part = if frac_bits == 0 { 0 } else { bits << int_bits };
|
||||
(false, int_part, frac_part)
|
||||
|
@ -137,8 +141,8 @@ macro_rules! fixed_num_signed {
|
|||
|
||||
#[inline]
|
||||
fn one() -> Option<Self> {
|
||||
let int_bits = <$Fixed<Frac> as FixedNum<Frac>>::int_bits();
|
||||
let frac_bits = <$Fixed<Frac> as FixedNum<Frac>>::frac_bits();
|
||||
let int_bits = <$Fixed<Frac> as FixedHelper<Frac>>::int_bits();
|
||||
let frac_bits = <$Fixed<Frac> as FixedHelper<Frac>>::frac_bits();
|
||||
if int_bits < 2 {
|
||||
None
|
||||
} else {
|
||||
|
@ -148,8 +152,8 @@ macro_rules! fixed_num_signed {
|
|||
|
||||
#[inline]
|
||||
fn minus_one() -> Option<Self> {
|
||||
let int_bits = <$Fixed<Frac> as FixedNum<Frac>>::int_bits();
|
||||
let frac_bits = <$Fixed<Frac> as FixedNum<Frac>>::frac_bits();
|
||||
let int_bits = <$Fixed<Frac> as FixedHelper<Frac>>::int_bits();
|
||||
let frac_bits = <$Fixed<Frac> as FixedHelper<Frac>>::frac_bits();
|
||||
if int_bits < 1 {
|
||||
None
|
||||
} else {
|
||||
|
@ -160,8 +164,8 @@ macro_rules! fixed_num_signed {
|
|||
#[inline]
|
||||
fn parts(self) -> (bool, $Part, $Part) {
|
||||
let bits = self.to_bits().wrapping_abs() as $Part;
|
||||
let int_bits = <$Fixed<Frac> as FixedNum<Frac>>::int_bits();
|
||||
let frac_bits = <$Fixed<Frac> as FixedNum<Frac>>::frac_bits();
|
||||
let int_bits = <$Fixed<Frac> as FixedHelper<Frac>>::int_bits();
|
||||
let frac_bits = <$Fixed<Frac> as FixedHelper<Frac>>::frac_bits();
|
||||
let int_part = if int_bits == 0 { 0 } else { bits >> frac_bits };
|
||||
let frac_part = if frac_bits == 0 { 0 } else { bits << int_bits };
|
||||
(self.to_bits() < 0, int_part,frac_part)
|
14
src/lib.rs
14
src/lib.rs
|
@ -70,7 +70,7 @@ additional terms or conditions.
|
|||
extern crate typenum;
|
||||
|
||||
mod display;
|
||||
mod traits;
|
||||
mod helper;
|
||||
|
||||
use std::cmp::Ordering;
|
||||
use std::f32;
|
||||
|
@ -83,7 +83,7 @@ use std::ops::{
|
|||
Add, AddAssign, BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign, Div, DivAssign,
|
||||
Mul, MulAssign, Neg, Not, Shl, ShlAssign, Shr, ShrAssign, Sub, SubAssign,
|
||||
};
|
||||
use traits::FixedNum;
|
||||
use helper::FixedHelper;
|
||||
use typenum::Unsigned;
|
||||
|
||||
macro_rules! if_signed {
|
||||
|
@ -726,10 +726,10 @@ macro_rules! fixed {
|
|||
match self.to_bits().cmp(&0) {
|
||||
Ordering::Equal => $Fixed::from_bits(0),
|
||||
Ordering::Greater => {
|
||||
<$Fixed<Frac> as FixedNum<Frac>>::one().expect("overflow")
|
||||
<$Fixed<Frac> as FixedHelper<Frac>>::one().expect("overflow")
|
||||
}
|
||||
Ordering::Less => {
|
||||
<$Fixed<Frac> as FixedNum<Frac>>::minus_one().expect("overflow")
|
||||
<$Fixed<Frac> as FixedHelper<Frac>>::minus_one().expect("overflow")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -745,6 +745,8 @@ macro_rules! fixed {
|
|||
),
|
||||
#[inline]
|
||||
pub fn from_bits(v: $Inner) -> $Fixed<Frac> {
|
||||
let bits = <$Fixed<Frac> as FixedHelper<Frac>>::bits();
|
||||
assert!(Frac::to_u32() <= bits, "`Frac` too large");
|
||||
$Fixed((v, PhantomData))
|
||||
}
|
||||
}
|
||||
|
@ -856,7 +858,7 @@ macro_rules! fixed {
|
|||
impl<Frac: Unsigned> Product<$Fixed<Frac>> for $Fixed<Frac> {
|
||||
fn product<I: Iterator<Item = $Fixed<Frac>>>(mut iter: I) -> $Fixed<Frac> {
|
||||
match iter.next() {
|
||||
None => <$Fixed<Frac> as FixedNum<Frac>>::one().expect("overflow"),
|
||||
None => <$Fixed<Frac> as FixedHelper<Frac>>::one().expect("overflow"),
|
||||
Some(first) => iter.fold(first, Mul::mul),
|
||||
}
|
||||
}
|
||||
|
@ -865,7 +867,7 @@ macro_rules! fixed {
|
|||
impl<'a, Frac: Unsigned + 'a> Product<&'a $Fixed<Frac>> for $Fixed<Frac> {
|
||||
fn product<I: Iterator<Item = &'a $Fixed<Frac>>>(mut iter: I) -> $Fixed<Frac> {
|
||||
match iter.next() {
|
||||
None => <$Fixed<Frac> as FixedNum<Frac>>::one().expect("overflow"),
|
||||
None => <$Fixed<Frac> as FixedHelper<Frac>>::one().expect("overflow"),
|
||||
Some(first) => iter.fold(*first, Mul::mul),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue