about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSteven Fackler <sfackler@gmail.com>2015-09-23 23:35:12 -0700
committerSteven Fackler <sfackler@gmail.com>2015-09-23 23:35:12 -0700
commite5ee13f139b95212961661701011f501447ea593 (patch)
treeaec648df0ebd7fdee3f654265baaac93141ed200
parent8fe79bdfdacb2f5914971bd1a0b63b9577afbf6a (diff)
downloadrust-e5ee13f139b95212961661701011f501447ea593.tar.gz
rust-e5ee13f139b95212961661701011f501447ea593.zip
Add accessors for Formatter flags
cc #27726
-rw-r--r--src/libcore/fmt/mod.rs36
1 files changed, 29 insertions, 7 deletions
diff --git a/src/libcore/fmt/mod.rs b/src/libcore/fmt/mod.rs
index db7e6d3006f..8c596eb3e99 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<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 @@ impl<T> 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<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,