Auto merge of #28615 - sfackler:formatter-methods, r=alexcrichton

cc #27726 

r? @alexcrichton
This commit is contained in:
bors 2015-09-26 02:02:03 +00:00
commit 7ebfd853c2

View File

@ -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,