Skip to content

Commit

Permalink
remove the wrapping arithmetics
Browse files Browse the repository at this point in the history
  • Loading branch information
krdln committed Feb 2, 2017
1 parent 7403ee9 commit ecda7f3
Showing 1 changed file with 5 additions and 10 deletions.
15 changes: 5 additions & 10 deletions src/libcore/fmt/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -274,16 +274,12 @@ impl<'a> Arguments<'a> {
#[unstable(feature = "fmt_internals", reason = "internal to format_args!",
issue = "0")]
pub fn estimated_capacity(&self) -> usize {
// Using wrapping arithmetics in this function, because
// wrong result is highly unlikely and doesn't cause unsafety.
use ::num::Wrapping as W;

let pieces_length: W<usize> = self.pieces.iter()
.map(|x| W(x.len())).sum();
let pieces_length: usize = self.pieces.iter()
.map(|x| x.len()).sum();

if self.args.is_empty() {
pieces_length.0
} else if self.pieces[0] == "" && pieces_length < W(16) {
pieces_length
} else if self.pieces[0] == "" && pieces_length < 16 {
// If the format string starts with an argument,
// don't preallocate anything, unless length
// of pieces is significant.
Expand All @@ -292,9 +288,8 @@ impl<'a> Arguments<'a> {
// There are some arguments, so any additional push
// will reallocate the string. To avoid that,
// we're "pre-doubling" the capacity here.
(pieces_length * W(2)).0
pieces_length.checked_mul(2).unwrap_or(0)
}

}
}

Expand Down

0 comments on commit ecda7f3

Please sign in to comment.