Auto merge of #28615 - sfackler:formatter-methods, r=alexcrichton
cc #27726 r? @alexcrichton
This commit is contained in:
commit
7ebfd853c2
@ -865,12 +865,12 @@ pub fn pad_integral(&mut self,
|
||||
let mut sign = None;
|
||||
if !is_positive {
|
||||
sign = Some('-'); width += 1;
|
||||
} else if self.flags & (1 << (FlagV1::SignPlus as u32)) != 0 {
|
||||
} else if self.sign_plus() {
|
||||
sign = Some('+'); width += 1;
|
||||
}
|
||||
|
||||
let mut prefixed = false;
|
||||
if self.flags & (1 << (FlagV1::Alternate as u32)) != 0 {
|
||||
if self.alternate() {
|
||||
prefixed = true; width += prefix.char_len();
|
||||
}
|
||||
|
||||
@ -900,7 +900,7 @@ pub fn pad_integral(&mut self,
|
||||
}
|
||||
// The sign and prefix goes before the padding if the fill character
|
||||
// is zero
|
||||
Some(min) if self.flags & (1 << (FlagV1::SignAwareZeroPad as u32)) != 0 => {
|
||||
Some(min) if self.sign_aware_zero_pad() => {
|
||||
self.fill = '0';
|
||||
try!(write_prefix(self));
|
||||
self.with_padding(min - width, Alignment::Right, |f| {
|
||||
@ -1013,7 +1013,7 @@ fn pad_formatted_parts(&mut self, formatted: &flt2dec::Formatted) -> Result {
|
||||
let mut formatted = formatted.clone();
|
||||
let mut align = self.align;
|
||||
let old_fill = self.fill;
|
||||
if self.flags & (1 << (FlagV1::SignAwareZeroPad as u32)) != 0 {
|
||||
if self.sign_aware_zero_pad() {
|
||||
// a sign always goes first
|
||||
let sign = unsafe { str::from_utf8_unchecked(formatted.sign) };
|
||||
try!(self.buf.write_str(sign));
|
||||
@ -1117,6 +1117,28 @@ pub fn width(&self) -> Option<usize> { self.width }
|
||||
issue = "27726")]
|
||||
pub fn precision(&self) -> Option<usize> { self.precision }
|
||||
|
||||
/// Determines if the `+` flag was specified.
|
||||
#[unstable(feature = "fmt_flags", reason = "method was just created",
|
||||
issue = "27726")]
|
||||
pub fn sign_plus(&self) -> bool { self.flags & (1 << FlagV1::SignPlus as u32) != 0 }
|
||||
|
||||
/// Determines if the `-` flag was specified.
|
||||
#[unstable(feature = "fmt_flags", reason = "method was just created",
|
||||
issue = "27726")]
|
||||
pub fn sign_minus(&self) -> bool { self.flags & (1 << FlagV1::SignMinus as u32) != 0 }
|
||||
|
||||
/// Determines if the `#` flag was specified.
|
||||
#[unstable(feature = "fmt_flags", reason = "method was just created",
|
||||
issue = "27726")]
|
||||
pub fn alternate(&self) -> bool { self.flags & (1 << FlagV1::Alternate as u32) != 0 }
|
||||
|
||||
/// Determines if the `0` flag was specified.
|
||||
#[unstable(feature = "fmt_flags", reason = "method was just created",
|
||||
issue = "27726")]
|
||||
pub fn sign_aware_zero_pad(&self) -> bool {
|
||||
self.flags & (1 << FlagV1::SignAwareZeroPad as u32) != 0
|
||||
}
|
||||
|
||||
/// Creates a `DebugStruct` builder designed to assist with creation of
|
||||
/// `fmt::Debug` implementations for structs.
|
||||
///
|
||||
@ -1361,7 +1383,7 @@ fn fmt(&self, f: &mut Formatter) -> Result {
|
||||
// it denotes whether to prefix with 0x. We use it to work out whether
|
||||
// or not to zero extend, and then unconditionally set it to get the
|
||||
// prefix.
|
||||
if f.flags & 1 << (FlagV1::Alternate as u32) > 0 {
|
||||
if f.alternate() {
|
||||
f.flags |= 1 << (FlagV1::SignAwareZeroPad as u32);
|
||||
|
||||
if let None = f.width {
|
||||
@ -1410,7 +1432,7 @@ fn fmt(&self, f: &mut Formatter) -> Result {
|
||||
fn float_to_decimal_common<T>(fmt: &mut Formatter, num: &T, negative_zero: bool) -> Result
|
||||
where T: flt2dec::DecodableFloat
|
||||
{
|
||||
let force_sign = fmt.flags & (1 << (FlagV1::SignPlus as u32)) != 0;
|
||||
let force_sign = fmt.sign_plus();
|
||||
let sign = match (force_sign, negative_zero) {
|
||||
(false, false) => flt2dec::Sign::Minus,
|
||||
(false, true) => flt2dec::Sign::MinusRaw,
|
||||
@ -1434,7 +1456,7 @@ fn float_to_decimal_common<T>(fmt: &mut Formatter, num: &T, negative_zero: bool)
|
||||
fn float_to_exponential_common<T>(fmt: &mut Formatter, num: &T, upper: bool) -> Result
|
||||
where T: flt2dec::DecodableFloat
|
||||
{
|
||||
let force_sign = fmt.flags & (1 << (FlagV1::SignPlus as u32)) != 0;
|
||||
let force_sign = fmt.sign_plus();
|
||||
let sign = match force_sign {
|
||||
false => flt2dec::Sign::Minus,
|
||||
true => flt2dec::Sign::MinusPlus,
|
||||
|
Loading…
Reference in New Issue
Block a user