Rollup merge of #49099 - glandium:master, r=sfackler
Use associated consts for GenericRadix base and prefix The trait being private, this does not imply an API change.
This commit is contained in:
commit
63ab36190d
@ -49,15 +49,13 @@ doit! { i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize }
|
||||
#[doc(hidden)]
|
||||
trait GenericRadix {
|
||||
/// The number of digits.
|
||||
fn base(&self) -> u8;
|
||||
const BASE: u8;
|
||||
|
||||
/// A radix-specific prefix string.
|
||||
fn prefix(&self) -> &'static str {
|
||||
""
|
||||
}
|
||||
const PREFIX: &'static str;
|
||||
|
||||
/// Converts an integer to corresponding radix digit.
|
||||
fn digit(&self, x: u8) -> u8;
|
||||
fn digit(x: u8) -> u8;
|
||||
|
||||
/// Format an integer using the radix using a formatter.
|
||||
fn fmt_int<T: Int>(&self, mut x: T, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
@ -67,14 +65,14 @@ trait GenericRadix {
|
||||
let is_nonnegative = x >= zero;
|
||||
let mut buf = [0; 128];
|
||||
let mut curr = buf.len();
|
||||
let base = T::from_u8(self.base());
|
||||
let base = T::from_u8(Self::BASE);
|
||||
if is_nonnegative {
|
||||
// Accumulate each digit of the number from the least significant
|
||||
// to the most significant figure.
|
||||
for byte in buf.iter_mut().rev() {
|
||||
let n = x % base; // Get the current place value.
|
||||
x = x / base; // Deaccumulate the number.
|
||||
*byte = self.digit(n.to_u8()); // Store the digit in the buffer.
|
||||
*byte = Self::digit(n.to_u8()); // Store the digit in the buffer.
|
||||
curr -= 1;
|
||||
if x == zero {
|
||||
// No more digits left to accumulate.
|
||||
@ -86,7 +84,7 @@ trait GenericRadix {
|
||||
for byte in buf.iter_mut().rev() {
|
||||
let n = zero - (x % base); // Get the current place value.
|
||||
x = x / base; // Deaccumulate the number.
|
||||
*byte = self.digit(n.to_u8()); // Store the digit in the buffer.
|
||||
*byte = Self::digit(n.to_u8()); // Store the digit in the buffer.
|
||||
curr -= 1;
|
||||
if x == zero {
|
||||
// No more digits left to accumulate.
|
||||
@ -95,7 +93,7 @@ trait GenericRadix {
|
||||
}
|
||||
}
|
||||
let buf = unsafe { str::from_utf8_unchecked(&buf[curr..]) };
|
||||
f.pad_integral(is_nonnegative, self.prefix(), buf)
|
||||
f.pad_integral(is_nonnegative, Self::PREFIX, buf)
|
||||
}
|
||||
}
|
||||
|
||||
@ -122,12 +120,12 @@ struct UpperHex;
|
||||
macro_rules! radix {
|
||||
($T:ident, $base:expr, $prefix:expr, $($x:pat => $conv:expr),+) => {
|
||||
impl GenericRadix for $T {
|
||||
fn base(&self) -> u8 { $base }
|
||||
fn prefix(&self) -> &'static str { $prefix }
|
||||
fn digit(&self, x: u8) -> u8 {
|
||||
const BASE: u8 = $base;
|
||||
const PREFIX: &'static str = $prefix;
|
||||
fn digit(x: u8) -> u8 {
|
||||
match x {
|
||||
$($x => $conv,)+
|
||||
x => panic!("number not in the range 0..{}: {}", self.base() - 1, x),
|
||||
x => panic!("number not in the range 0..{}: {}", Self::BASE - 1, x),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user