|
@@ -8,10 +8,10 @@ pub struct ByteReader<Rd> {
|
|
|
|
|
|
#[test]
|
|
|
fn reader_tests() {
|
|
|
- assert!(ByteReader::from_vec(vec![0x00]).read_twip() == Ok(-32.0));
|
|
|
- assert!(ByteReader::from_vec(vec![0x00]).read_prefix_int() == Ok(0x00));
|
|
|
- assert!(ByteReader::from_vec(vec![0x7f]).read_prefix_int() == Ok(0x7f));
|
|
|
- assert!(ByteReader::from_vec(vec![0x80,0xff]).read_prefix_int() == Ok(0xff));
|
|
|
+ assert!(ByteReader::from_slice(&[0x00]).read_twip() == Ok(-32.0));
|
|
|
+ assert!(ByteReader::from_slice(&[0x00]).read_prefix_int() == Ok(0x00));
|
|
|
+ assert!(ByteReader::from_slice(&[0x7f]).read_prefix_int() == Ok(0x7f));
|
|
|
+ assert!(ByteReader::from_slice(&[0x80,0xff]).read_prefix_int() == Ok(0xff));
|
|
|
}
|
|
|
|
|
|
const MK_OK: &'static Fn(io::Result<u8>) -> Option<u8> = &|s| s.ok();
|
|
@@ -44,9 +44,12 @@ impl ByteReader<vec::IntoIter<u8>> {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-impl<'a> ByteReader<slice::Iter<'a, u8>> {
|
|
|
+const DEREF: &'static Fn(&u8) -> u8 = &|s| *s;
|
|
|
+
|
|
|
+impl<'a> ByteReader<iter::Map<slice::Iter<'a, u8>, &'static Fn(&u8) -> u8>> {
|
|
|
+ /// Create a reader from a borrowed slice, with a copy on each access
|
|
|
pub fn from_slice(lst: &'a [u8]) -> Self {
|
|
|
- ByteReader { bytes: lst.iter() }
|
|
|
+ ByteReader { bytes: lst.iter().map(DEREF) }
|
|
|
}
|
|
|
}
|
|
|
|