Numbers now define how many bytes it takes to represent them.
Numbers now have an associated constant value that defines how many bytes it takes to define them.
This commit is contained in:
parent
902aeb5dbe
commit
946ad90fa0
@ -1,3 +1,5 @@
|
|||||||
|
use std::{u8, u16, u32, u64, usize};
|
||||||
|
use std::{i8, i16, i32, i64, isize};
|
||||||
use std::cmp::PartialEq;
|
use std::cmp::PartialEq;
|
||||||
use std::mem::size_of;
|
use std::mem::size_of;
|
||||||
use std::num::{Zero, One};
|
use std::num::{Zero, One};
|
||||||
@ -15,6 +17,11 @@ pub trait Number : Zero + One + Add<Output=Self> + Sub<Output=Self> +
|
|||||||
{
|
{
|
||||||
type StrRadixError;
|
type StrRadixError;
|
||||||
|
|
||||||
|
|
||||||
|
/// The amount of Bytes required to represent this Number.
|
||||||
|
const BYTES: u8;
|
||||||
|
|
||||||
|
|
||||||
/// Create a number from a given string and base radix.
|
/// Create a number from a given string and base radix.
|
||||||
///
|
///
|
||||||
///```
|
///```
|
||||||
@ -749,6 +756,10 @@ macro_rules! int_number_trait_impl
|
|||||||
{
|
{
|
||||||
type StrRadixError = ::std::num::ParseIntError;
|
type StrRadixError = ::std::num::ParseIntError;
|
||||||
|
|
||||||
|
|
||||||
|
const BYTES: u8 = <$varType>::BYTES;
|
||||||
|
|
||||||
|
|
||||||
fn from_str_radix(src: &str, radix: u32) ->
|
fn from_str_radix(src: &str, radix: u32) ->
|
||||||
Result<Self, ::std::num::ParseIntError>
|
Result<Self, ::std::num::ParseIntError>
|
||||||
{
|
{
|
||||||
@ -762,12 +773,16 @@ macro_rules! int_number_trait_impl
|
|||||||
/// base float types in rust.
|
/// base float types in rust.
|
||||||
macro_rules! float_number_trait_impl
|
macro_rules! float_number_trait_impl
|
||||||
{
|
{
|
||||||
($traitName: ident for $($varType: ty)*) =>
|
($traitName: ident for $($varType: ty, $numBytes: expr)*) =>
|
||||||
($(
|
($(
|
||||||
impl $traitName for $varType
|
impl $traitName for $varType
|
||||||
{
|
{
|
||||||
type StrRadixError = ::std::num::ParseFloatError;
|
type StrRadixError = ::std::num::ParseFloatError;
|
||||||
|
|
||||||
|
|
||||||
|
const BYTES: u8 = $numBytes;
|
||||||
|
|
||||||
|
|
||||||
fn from_str_radix(src: &str, radix: u32) ->
|
fn from_str_radix(src: &str, radix: u32) ->
|
||||||
Result<Self, ::std::num::ParseFloatError>
|
Result<Self, ::std::num::ParseFloatError>
|
||||||
{
|
{
|
||||||
@ -787,7 +802,7 @@ macro_rules! float_number_trait_impl
|
|||||||
// Implement the Number trait for the types that are Numbers.
|
// Implement the Number trait for the types that are Numbers.
|
||||||
int_number_trait_impl!(Number for u8 u16 u32 u64 usize);
|
int_number_trait_impl!(Number for u8 u16 u32 u64 usize);
|
||||||
int_number_trait_impl!(Number for i8 i16 i32 i64 isize);
|
int_number_trait_impl!(Number for i8 i16 i32 i64 isize);
|
||||||
float_number_trait_impl!(Number for f32 f64);
|
float_number_trait_impl!(Number for f32, 4 f64, 8);
|
||||||
|
|
||||||
// Implement the ToNumber and FromNumber traits for
|
// Implement the ToNumber and FromNumber traits for
|
||||||
// the types that are Numbers. The FromNumber trait needs
|
// the types that are Numbers. The FromNumber trait needs
|
||||||
|
Loading…
x
Reference in New Issue
Block a user