#[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.
// 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)
}
-
}
}