mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-22 20:03:37 +00:00
remove the wrapping arithmetics
This commit is contained in:
parent
7403ee9d07
commit
ecda7f314f
@ -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.
|
||||
@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user