Skip to content

Commit 45c10db

Browse files
author
bcoopers
committed
Clarified and simplified algorithm for increasing size of buffer in
read_to_end()
1 parent 92f3d9a commit 45c10db

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

src/libstd/io/mod.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,15 +101,14 @@ fn append_to_string<F>(buf: &mut String, f: F) -> Result<usize>
101101
fn read_to_end<R: Read + ?Sized>(r: &mut R, buf: &mut Vec<u8>) -> Result<usize> {
102102
let start_len = buf.len();
103103
let mut len = start_len;
104-
let mut cap_bump = 16;
104+
let min_cap_bump = 16;
105105
let ret;
106106
loop {
107107
if len == buf.len() {
108108
if buf.capacity() == buf.len() {
109-
if cap_bump < DEFAULT_BUF_SIZE {
110-
cap_bump *= 2;
111-
}
112-
buf.reserve(cap_bump);
109+
// reserve() rounds up our request to the nearest power of two, so after the first
110+
// time the capacity is exceeded, we double our capacity at each call to reserve.
111+
buf.reserve(min_cap_bump);
113112
}
114113
let new_area = buf.capacity() - buf.len();
115114
buf.extend(iter::repeat(0).take(new_area));

0 commit comments

Comments
 (0)