@@ -11,14 +11,18 @@ pub enum BooleanRun {
1111 Literals ( [ u8 ; 255 ] ) ,
1212}
1313
14- pub struct BooleanRleRunIter < ' a , R : Read > {
15- reader : & ' a mut R ,
14+ pub struct BooleanRleRunIter < R : Read > {
15+ reader : R ,
1616}
1717
18- impl < ' a , R : Read > BooleanRleRunIter < ' a , R > {
19- pub fn new ( reader : & ' a mut R ) -> Self {
18+ impl < R : Read > BooleanRleRunIter < R > {
19+ pub fn new ( reader : R ) -> Self {
2020 Self { reader }
2121 }
22+
23+ pub fn into_inner ( self ) -> R {
24+ self . reader
25+ }
2226}
2327
2428fn read_literals < R : Read > ( reader : & mut R , header : i8 ) -> Result < [ u8 ; 255 ] , Error > {
@@ -33,22 +37,22 @@ fn read_literals<R: Read>(reader: &mut R, header: i8) -> Result<[u8; 255], Error
3337 Ok ( literals)
3438}
3539
36- impl < ' a , R : Read > Iterator for BooleanRleRunIter < ' a , R > {
40+ impl < R : Read > Iterator for BooleanRleRunIter < R > {
3741 type Item = Result < BooleanRun , Error > ;
3842
3943 #[ inline]
4044 fn next ( & mut self ) -> Option < Self :: Item > {
41- let header = read_u8 ( self . reader ) ;
45+ let header = read_u8 ( & mut self . reader ) ;
4246 let header = match header {
4347 Ok ( header) => header as i8 ,
4448 Err ( e) => return Some ( Err ( e. into ( ) ) ) ,
4549 } ;
4650 if header < 0 {
47- Some ( read_literals ( self . reader , header) . map ( BooleanRun :: Literals ) )
51+ Some ( read_literals ( & mut self . reader , header) . map ( BooleanRun :: Literals ) )
4852 } else {
4953 let length = header as u16 + 3 ;
5054 // this is not ok - it may require more than one byte
51- let value = read_u8 ( self . reader ) ;
55+ let value = read_u8 ( & mut self . reader ) ;
5256 let value = match value {
5357 Ok ( value) => value,
5458 Err ( e) => return Some ( Err ( e. into ( ) ) ) ,
@@ -58,16 +62,16 @@ impl<'a, R: Read> Iterator for BooleanRleRunIter<'a, R> {
5862 }
5963}
6064
61- pub struct BooleanIter < ' a , R : Read > {
62- iter : BooleanRleRunIter < ' a , R > ,
65+ pub struct BooleanIter < R : Read > {
66+ iter : BooleanRleRunIter < R > ,
6367 current : Option < BooleanRun > ,
6468 position : u8 ,
6569 byte_position : usize ,
6670 remaining : usize ,
6771}
6872
69- impl < ' a , R : Read > BooleanIter < ' a , R > {
70- pub fn new ( reader : & ' a mut R , length : usize ) -> Self {
73+ impl < ' a , R : Read > BooleanIter < R > {
74+ pub fn new ( reader : R , length : usize ) -> Self {
7175 Self {
7276 iter : BooleanRleRunIter :: new ( reader) ,
7377 current : None ,
@@ -76,9 +80,13 @@ impl<'a, R: Read> BooleanIter<'a, R> {
7680 remaining : length,
7781 }
7882 }
83+
84+ pub fn into_inner ( self ) -> R {
85+ self . iter . into_inner ( )
86+ }
7987}
8088
81- impl < ' a , R : Read > Iterator for BooleanIter < ' a , R > {
89+ impl < R : Read > Iterator for BooleanIter < R > {
8290 type Item = Result < bool , Error > ;
8391
8492 #[ inline]
0 commit comments