@@ -157,59 +157,55 @@ impl Encoder {
157157// -----------------------------------------------------------------------------
158158
159159pub struct Decoder < ' a > {
160- pub data : & ' a [ u8 ] ,
161- position : usize ,
160+ pub original_data : & ' a [ u8 ] ,
161+ data : & ' a [ u8 ] ,
162162}
163163
164164impl < ' a > Decoder < ' a > {
165165 #[ inline]
166- pub fn new ( data : & ' a [ u8 ] , position : usize ) -> Decoder < ' a > {
166+ pub fn new ( data : & ' a [ u8 ] , pos : usize ) -> Decoder < ' a > {
167167 Decoder {
168- data,
169- position ,
168+ original_data : data,
169+ data : & data [ pos.. ] ,
170170 }
171171 }
172172
173173 #[ inline]
174- pub fn position ( & self ) -> usize {
175- self . position
174+ pub fn data ( & self ) -> & [ u8 ] {
175+ self . data
176176 }
177177
178178 #[ inline]
179- pub fn set_position ( & mut self , pos : usize ) {
180- self . position = pos
179+ pub fn position ( & self ) -> usize {
180+ self . data . as_ptr ( ) . wrapping_offset_from ( self . original_data . as_ptr ( ) ) as usize
181181 }
182182
183183 #[ inline]
184184 pub fn advance ( & mut self , bytes : usize ) {
185- self . position += bytes;
185+ self . data = & self . data [ bytes.. ] ;
186186 }
187187
188188 #[ inline]
189189 pub fn read_raw_bytes ( & mut self , s : & mut [ u8 ] ) -> Result < ( ) , String > {
190- let start = self . position ;
191- let end = start + s. len ( ) ;
192-
193- s. copy_from_slice ( & self . data [ start..end] ) ;
194-
195- self . position = end;
190+ s. copy_from_slice ( & self . data [ ..s. len ( ) ] ) ;
191+ self . advance ( s. len ( ) ) ;
196192
197193 Ok ( ( ) )
198194 }
199195}
200196
201197macro_rules! read_uleb128 {
202198 ( $dec: expr, $t: ty, $fun: ident) => ( {
203- let ( value, bytes_read) = leb128:: $fun( & $dec. data[ $dec . position .. ] ) ;
204- $dec. position += bytes_read;
199+ let ( value, bytes_read) = leb128:: $fun( & $dec. data) ;
200+ $dec. advance ( bytes_read) ;
205201 Ok ( value)
206202 } )
207203}
208204
209205macro_rules! read_sleb128 {
210206 ( $dec: expr, $t: ty) => ( {
211- let ( value, bytes_read) = read_signed_leb128( $dec. data, $dec . position ) ;
212- $dec. position += bytes_read;
207+ let ( value, bytes_read) = read_signed_leb128( $dec. data) ;
208+ $dec. advance ( bytes_read) ;
213209 Ok ( value as $t)
214210 } )
215211}
@@ -245,8 +241,8 @@ impl<'a> serialize::Decoder for Decoder<'a> {
245241
246242 #[ inline]
247243 fn read_u8 ( & mut self ) -> Result < u8 , Self :: Error > {
248- let value = self . data [ self . position ] ;
249- self . position += 1 ;
244+ let value = self . data [ 0 ] ;
245+ self . advance ( 1 ) ;
250246 Ok ( value)
251247 }
252248
@@ -277,8 +273,8 @@ impl<'a> serialize::Decoder for Decoder<'a> {
277273
278274 #[ inline]
279275 fn read_i8 ( & mut self ) -> Result < i8 , Self :: Error > {
280- let as_u8 = self . data [ self . position ] ;
281- self . position += 1 ;
276+ let as_u8 = self . data [ 0 ] ;
277+ self . advance ( 1 ) ;
282278 unsafe { Ok ( :: std:: mem:: transmute ( as_u8) ) }
283279 }
284280
@@ -314,8 +310,8 @@ impl<'a> serialize::Decoder for Decoder<'a> {
314310 #[ inline]
315311 fn read_str ( & mut self ) -> Result < Cow < ' _ , str > , Self :: Error > {
316312 let len = self . read_usize ( ) ?;
317- let s = :: std:: str:: from_utf8 ( & self . data [ self . position .. self . position + len] ) . unwrap ( ) ;
318- self . position += len;
313+ let s = :: std:: str:: from_utf8 ( & self . data [ .. len] ) . unwrap ( ) ;
314+ self . advance ( len) ;
319315 Ok ( Cow :: Borrowed ( s) )
320316 }
321317
0 commit comments