From e2609a2fb70bc121f8021ff4ce56b92558d9ccd0 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sun, 12 Dec 2021 11:53:52 -0800 Subject: [PATCH] Combine IntegerPrivate into Sealed trait --- src/lib.rs | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 83d6670..fcda03d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -101,12 +101,10 @@ pub trait Integer: private::Sealed {} mod private { pub trait Sealed: Copy { fn write(self, buf: &mut crate::Buffer) -> &str; - } -} -trait IntegerPrivate { - type Buffer; - fn write_to(self, buf: &mut Self::Buffer) -> &str; + type Buffer; + fn write2(self, buf: &mut Self::Buffer) -> &str; + } } const DEC_DIGITS_LUT: &[u8] = b"\ @@ -131,17 +129,15 @@ macro_rules! impl_Integer { &mut [MaybeUninit; I128_MAX_LEN], &mut [MaybeUninit; $max_len], >(&mut buf.bytes); - self.write_to(buf) + self.write2(buf) } } - } - impl IntegerPrivate for $t { type Buffer = [MaybeUninit; $max_len]; #[allow(unused_comparisons)] #[inline] - fn write_to(self, buf: &mut [MaybeUninit; $max_len]) -> &str { + fn write2(self, buf: &mut [MaybeUninit; $max_len]) -> &str { let is_nonnegative = self >= 0; let mut n = if is_nonnegative { self as $conv_fn @@ -246,17 +242,15 @@ macro_rules! impl_Integer128 { &mut [MaybeUninit; I128_MAX_LEN], &mut [MaybeUninit; $max_len], >(&mut buf.bytes); - self.write_to(buf) + self.write2(buf) } } - } - impl IntegerPrivate for $t { type Buffer = [MaybeUninit; $max_len]; #[allow(unused_comparisons)] #[inline] - fn write_to(self, buf: &mut [MaybeUninit; $max_len]) -> &str { + fn write2(self, buf: &mut [MaybeUninit; $max_len]) -> &str { let is_nonnegative = self >= 0; let n = if is_nonnegative { self as u128 @@ -271,7 +265,7 @@ macro_rules! impl_Integer128 { // Divide by 10^19 which is the highest power less than 2^64. let (n, rem) = udiv128::udivmod_1e19(n); let buf1 = buf_ptr.offset(curr - U64_MAX_LEN as isize) as *mut [MaybeUninit; U64_MAX_LEN]; - curr -= rem.write_to(&mut *buf1).len() as isize; + curr -= rem.write2(&mut *buf1).len() as isize; if n != 0 { // Memset the base10 leading zeros of rem. @@ -282,7 +276,7 @@ macro_rules! impl_Integer128 { // Divide by 10^19 again. let (n, rem) = udiv128::udivmod_1e19(n); let buf2 = buf_ptr.offset(curr - U64_MAX_LEN as isize) as *mut [MaybeUninit; U64_MAX_LEN]; - curr -= rem.write_to(&mut *buf2).len() as isize; + curr -= rem.write2(&mut *buf2).len() as isize; if n != 0 { // Memset the leading zeros.