Include the minus sign in the same buffer, to only make a single write_all call.

This commit is contained in:
Simon Sapin 2017-08-29 16:55:32 +02:00 committed by David Tolnay
parent 678a4b4524
commit 220a8680ca
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82
2 changed files with 7 additions and 5 deletions

View File

@ -37,7 +37,6 @@ macro_rules! impl_Integer {
let mut n = if is_nonnegative { let mut n = if is_nonnegative {
self as $conv_fn self as $conv_fn
} else { } else {
try!(wr.write_all(b"-"));
// convert the negative num to positive by summing 1 to it's 2 complement // convert the negative num to positive by summing 1 to it's 2 complement
(!(self as $conv_fn)).wrapping_add(1) (!(self as $conv_fn)).wrapping_add(1)
}; };
@ -81,13 +80,15 @@ macro_rules! impl_Integer {
curr -= 2; curr -= 2;
ptr::copy_nonoverlapping(lut_ptr.offset(d1), buf_ptr.offset(curr), 2); ptr::copy_nonoverlapping(lut_ptr.offset(d1), buf_ptr.offset(curr), 2);
} }
if !is_nonnegative {
curr -= 1;
*buf_ptr.offset(curr) = b'-';
}
} }
let mut len = buf.len() - curr as usize; let len = buf.len() - curr as usize;
try!(wr.write_all(unsafe { slice::from_raw_parts(buf_ptr.offset(curr), len) })); try!(wr.write_all(unsafe { slice::from_raw_parts(buf_ptr.offset(curr), len) }));
if !is_nonnegative {
len += 1;
}
Ok(len) Ok(len)
} }
})*); })*);

View File

@ -19,6 +19,7 @@ test!(
test_0u64(0u64, "0"), test_0u64(0u64, "0"),
test_HALFu64(<u32>::max_value() as u64, "4294967295"), test_HALFu64(<u32>::max_value() as u64, "4294967295"),
test_MAXu64(<u64>::max_value(), "18446744073709551615"), test_MAXu64(<u64>::max_value(), "18446744073709551615"),
test_MINi64(<i64>::min_value(), "-9223372036854775808"),
test_0i16(0i16, "0"), test_0i16(0i16, "0"),
test_MINi16(<i16>::min_value(), "-32768"), test_MINi16(<i16>::min_value(), "-32768"),