some renaming

This commit is contained in:
Trevor Spiteri 2018-08-10 20:17:13 +02:00
parent 774635a208
commit 62781ba14d
3 changed files with 29 additions and 23 deletions

View File

@ -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();

View File

@ -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)

View File

@ -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),
}
}