Coverage Report

Created: 2026-09-01 07:45

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/flate2-1.1.10/src/bufreader.rs
Line
Count
Source
1
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
2
// file at the top-level directory of this distribution and at
3
// <https://github.com/rust-lang/rust/blob/HEAD/COPYRIGHT>.
4
//
5
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6
// https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7
// <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
8
// option. This file may not be copied, modified, or distributed
9
// except according to those terms.
10
11
use crate::io;
12
use crate::io::{BufRead, Read};
13
use alloc::boxed::Box;
14
use alloc::vec::Vec;
15
use core::cmp;
16
use core::mem;
17
18
pub struct BufReader<R> {
19
    inner: R,
20
    buf: Box<[u8]>,
21
    pos: usize,
22
    cap: usize,
23
}
24
25
impl<R> ::core::fmt::Debug for BufReader<R>
26
where
27
    R: ::core::fmt::Debug,
28
{
29
0
    fn fmt(&self, fmt: &mut ::core::fmt::Formatter) -> Result<(), ::core::fmt::Error> {
30
0
        fmt.debug_struct("BufReader")
31
0
            .field("reader", &self.inner)
32
0
            .field(
33
0
                "buffer",
34
0
                &format_args!("{}/{}", self.cap - self.pos, self.buf.len()),
35
0
            )
36
0
            .finish()
37
0
    }
38
}
39
40
impl<R: Read> BufReader<R> {
41
0
    pub fn new(inner: R) -> BufReader<R> {
42
0
        BufReader::with_buf(vec![0; 32 * 1024], inner)
43
0
    }
44
45
3.24k
    pub fn with_buf(buf: Vec<u8>, inner: R) -> BufReader<R> {
46
3.24k
        BufReader {
47
3.24k
            inner,
48
3.24k
            buf: buf.into_boxed_slice(),
49
3.24k
            pos: 0,
50
3.24k
            cap: 0,
51
3.24k
        }
52
3.24k
    }
<flate2::bufreader::BufReader<&mut std::io::cursor::Cursor<&[u8]>>>::with_buf
Line
Count
Source
45
3.24k
    pub fn with_buf(buf: Vec<u8>, inner: R) -> BufReader<R> {
46
3.24k
        BufReader {
47
3.24k
            inner,
48
3.24k
            buf: buf.into_boxed_slice(),
49
3.24k
            pos: 0,
50
3.24k
            cap: 0,
51
3.24k
        }
52
3.24k
    }
Unexecuted instantiation: <flate2::bufreader::BufReader<_>>::with_buf
53
}
54
55
impl<R> BufReader<R> {
56
0
    pub fn get_ref(&self) -> &R {
57
0
        &self.inner
58
0
    }
59
60
0
    pub fn get_mut(&mut self) -> &mut R {
61
0
        &mut self.inner
62
0
    }
63
64
0
    pub fn into_inner(self) -> R {
65
0
        self.inner
66
0
    }
67
68
0
    pub fn reset(&mut self, inner: R) -> R {
69
0
        self.pos = 0;
70
0
        self.cap = 0;
71
0
        mem::replace(&mut self.inner, inner)
72
0
    }
73
}
74
75
impl<R: Read> Read for BufReader<R> {
76
0
    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
77
        // If we don't have any buffered data and we're doing a massive read
78
        // (larger than our internal buffer), bypass our internal buffer
79
        // entirely.
80
0
        if self.pos == self.cap && buf.len() >= self.buf.len() {
81
0
            return self.inner.read(buf);
82
0
        }
83
0
        let nread = {
84
0
            let mut rem = self.fill_buf()?;
85
0
            rem.read(buf)?
86
        };
87
0
        self.consume(nread);
88
0
        Ok(nread)
89
0
    }
90
}
91
92
impl<R: Read> BufRead for BufReader<R> {
93
419k
    fn fill_buf(&mut self) -> io::Result<&[u8]> {
94
        // If we've reached the end of our internal buffer then we need to fetch
95
        // some more data from the underlying reader.
96
419k
        if self.pos == self.cap {
97
6.53k
            self.cap = self.inner.read(&mut self.buf)?;
98
6.53k
            self.pos = 0;
99
412k
        }
100
419k
        Ok(&self.buf[self.pos..self.cap])
101
419k
    }
<flate2::bufreader::BufReader<&mut std::io::cursor::Cursor<&[u8]>> as std::io::BufRead>::fill_buf
Line
Count
Source
93
419k
    fn fill_buf(&mut self) -> io::Result<&[u8]> {
94
        // If we've reached the end of our internal buffer then we need to fetch
95
        // some more data from the underlying reader.
96
419k
        if self.pos == self.cap {
97
6.53k
            self.cap = self.inner.read(&mut self.buf)?;
98
6.53k
            self.pos = 0;
99
412k
        }
100
419k
        Ok(&self.buf[self.pos..self.cap])
101
419k
    }
Unexecuted instantiation: <flate2::bufreader::BufReader<_> as std::io::BufRead>::fill_buf
102
103
419k
    fn consume(&mut self, amt: usize) {
104
419k
        self.pos = cmp::min(self.pos + amt, self.cap);
105
419k
    }
<flate2::bufreader::BufReader<&mut std::io::cursor::Cursor<&[u8]>> as std::io::BufRead>::consume
Line
Count
Source
103
419k
    fn consume(&mut self, amt: usize) {
104
419k
        self.pos = cmp::min(self.pos + amt, self.cap);
105
419k
    }
Unexecuted instantiation: <flate2::bufreader::BufReader<_> as std::io::BufRead>::consume
106
}