Skip to content

Commit 49ba513

Browse files
committed
auto merge of #12299 : sfackler/rust/limit-return, r=alexcrichton
This is useful in contexts like this: ```rust let size = rdr.read_be_i32() as uint; let mut limit = LimitReader::new(rdr.by_ref(), size); let thing = read_a_thing(&mut limit); assert!(limit.limit() == 0); ```
2 parents 0c62d9d + 23fdbcf commit 49ba513

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

src/libstd/io/util.rs

+24-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,18 @@ impl<R: Reader> LimitReader<R> {
2424
pub fn new(r: R, limit: uint) -> LimitReader<R> {
2525
LimitReader { limit: limit, inner: r }
2626
}
27+
28+
/// Consumes the `LimitReader`, returning the underlying `Reader`.
2729
pub fn unwrap(self) -> R { self.inner }
30+
31+
/// Returns the number of bytes that can be read before the `LimitReader`
32+
/// will return EOF.
33+
///
34+
/// # Note
35+
///
36+
/// The reader may reach EOF after reading fewer bytes than indicated by
37+
/// this method if the underlying reader reaches EOF.
38+
pub fn limit(&self) -> uint { self.limit }
2839
}
2940

3041
impl<R: Reader> Reader for LimitReader<R> {
@@ -190,7 +201,7 @@ mod test {
190201
use prelude::*;
191202

192203
#[test]
193-
fn test_bounded_reader_unlimited() {
204+
fn test_limit_reader_unlimited() {
194205
let mut r = MemReader::new(~[0, 1, 2]);
195206
{
196207
let mut r = LimitReader::new(r.by_ref(), 4);
@@ -199,7 +210,7 @@ mod test {
199210
}
200211

201212
#[test]
202-
fn test_bound_reader_limited() {
213+
fn test_limit_reader_limited() {
203214
let mut r = MemReader::new(~[0, 1, 2]);
204215
{
205216
let mut r = LimitReader::new(r.by_ref(), 2);
@@ -208,6 +219,17 @@ mod test {
208219
assert_eq!(~[2], r.read_to_end().unwrap());
209220
}
210221

222+
#[test]
223+
fn test_limit_reader_limit() {
224+
let r = MemReader::new(~[0, 1, 2]);
225+
let mut r = LimitReader::new(r, 3);
226+
assert_eq!(3, r.limit());
227+
assert_eq!(0, r.read_byte().unwrap());
228+
assert_eq!(2, r.limit());
229+
assert_eq!(~[1, 2], r.read_to_end().unwrap());
230+
assert_eq!(0, r.limit());
231+
}
232+
211233
#[test]
212234
fn test_null_writer() {
213235
let mut s = NullWriter;

0 commit comments

Comments
 (0)