diff --git a/src/libcore/fmt/mod.rs b/src/libcore/fmt/mod.rs index db7e6d3006f3f..8c596eb3e997b 100644 --- a/src/libcore/fmt/mod.rs +++ b/src/libcore/fmt/mod.rs @@ -865,12 +865,12 @@ impl<'a> Formatter<'a> { 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 @@ impl<'a> Formatter<'a> { } // 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 @@ impl<'a> Formatter<'a> { 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 @@ impl<'a> Formatter<'a> { issue = "27726")] pub fn precision(&self) -> Option { 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 @@ impl Pointer for *const T { // 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 @@ impl<'a, T> Pointer for &'a mut T { fn float_to_decimal_common(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(fmt: &mut Formatter, num: &T, negative_zero: bool) fn float_to_exponential_common(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,