add FixedLong type
parent
93e6119604
commit
54d253c89b
|
@ -67,7 +67,7 @@ macro_rules! define_fixed_types {
|
|||
$(
|
||||
$(#[$outer:meta])*
|
||||
struct $t:ident ( $ti:ident, $bytes:expr ) :
|
||||
$tu:ident, $frac_bits:expr; $test:ident
|
||||
$tu:ident, $tb:ident, $frac_bits:expr; $test:ident
|
||||
)*
|
||||
) => {$(
|
||||
$(#[$outer])*
|
||||
|
@ -109,6 +109,10 @@ macro_rules! define_fixed_types {
|
|||
#[inline]
|
||||
pub const fn fract(self) -> $t {$t(self.0 & $t::frac_mask_i())}
|
||||
|
||||
/// Returns the integer part of a number as an integer.
|
||||
#[inline]
|
||||
pub const fn integ(self) -> $ti {self.0 >> $t::frac_bits()}
|
||||
|
||||
/// Returns the number of ones in the bit representation of self.
|
||||
#[inline]
|
||||
pub const fn count_ones(self) -> u32 {self.0.count_ones()}
|
||||
|
@ -218,13 +222,13 @@ macro_rules! define_fixed_types {
|
|||
#[inline]
|
||||
fn div_k(x: $ti, y: $ti) -> $ti
|
||||
{
|
||||
(i64::from(x) * i64::from($t::one()) / i64::from(y)) as $ti
|
||||
($tb::from(x) * $tb::from($t::one()) / $tb::from(y)) as $ti
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn mul_k(x: $ti, y: $ti) -> $ti
|
||||
{
|
||||
(i64::from(x) * i64::from(y) / i64::from($t::one())) as $ti
|
||||
($tb::from(x) * $tb::from(y) / $tb::from($t::one())) as $ti
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -423,17 +427,22 @@ define_fixed_types! {
|
|||
///
|
||||
/// The format of this type is `0.9s`, but because of the implementation,
|
||||
/// the real format is `7.9s`.
|
||||
struct Angle(i16, 2) : u16, 9; angle_tests
|
||||
struct Angle(i16, 2) : u16, i32, 9; angle_tests
|
||||
|
||||
/// A fixed point type representing a world unit.
|
||||
///
|
||||
/// The format of this type is `5.10s`. This has caused eternal suffering.
|
||||
struct Unit(i16, 2) : u16, 10; unit_tests
|
||||
struct Unit(i16, 2) : u16, i32, 10; unit_tests
|
||||
|
||||
/// A generic fixed point type.
|
||||
///
|
||||
/// The format of this type is `15.16s`.
|
||||
struct Fixed(i32, 4) : u32, 16; fixed_tests
|
||||
struct Fixed(i32, 4) : u32, i64, 16; fixed_tests
|
||||
|
||||
/// A generic, long fixed point type.
|
||||
///
|
||||
/// The format of this type is `31.32s`.
|
||||
struct FixedLong(i64, 8) : u64, i128, 32; fixed_long_tests
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
Loading…
Reference in New Issue