@@ -176,7 +176,7 @@ def byte_align(self):
176176
177177 def read_uint8 (self ):
178178 """ Returns the next 8 bits as an unsigned integer """
179- data = self ._buffer .read_uint8 ( )
179+ data = ord ( self ._buffer .read ( 1 ) )
180180
181181 if self ._bit_shift != 0 :
182182 lo_mask , hi_mask = self ._bit_masks [self ._bit_shift ]
@@ -231,7 +231,7 @@ def read_uint64(self):
231231
232232 def read_vint (self ):
233233 """ Reads a signed integer of variable length """
234- byte = self .read_uint8 ( )
234+ byte = ord ( self ._buffer . read ( 1 ) )
235235 negative = byte & 0x01
236236 result = (byte & 0x7F ) >> 1
237237 bits = 6
@@ -335,8 +335,8 @@ def read_struct(self, datatype=None):
335335 """ Reads a nested data structure. If the type is not specified the
336336 first byte is used as the type identifier.
337337 """
338- self .byte_align () # I think this is true
339- datatype = self .read_uint8 ( ) if datatype is None else datatype
338+ self .byte_align ()
339+ datatype = ord ( self ._buffer . read ( 1 ) ) if datatype is None else datatype
340340
341341 if datatype == 0x00 : # array
342342 data = [self .read_struct () for i in range (self .read_vint ())]
@@ -347,31 +347,28 @@ def read_struct(self, datatype=None):
347347
348348 elif datatype == 0x02 : # blob
349349 length = self .read_vint ()
350- data = self .read_bytes (length )
350+ data = self ._buffer . read_bytes (length )
351351
352352 elif datatype == 0x03 : # choice
353353 flag = self .read_vint ()
354354 data = self .read_struct ()
355355
356356 elif datatype == 0x04 : # optional
357- exists = self .read_uint8 () != 0
357+ exists = self ._buffer . read_uint8 () != 0
358358 data = self .read_struct () if exists else None
359359
360360 elif datatype == 0x05 : # Struct
361- data = OrderedDict ()
362361 entries = self .read_vint ()
363- for i in range (entries ):
364- key = self .read_vint () # Must be read first
365- data [key ] = self .read_struct ()
362+ data = dict ([(self .read_vint (), self .read_struct ()) for i in range (entries )])
366363
367364 elif datatype == 0x06 : # u8
368- data = self .read_uint8 ( )
365+ data = ord ( self ._buffer . read ( 1 ) )
369366
370367 elif datatype == 0x07 : # u32
371- data = self .read_bytes (4 ) # self.read_uint32()
368+ data = self ._buffer . read_bytes (4 ) # self.read_uint32()
372369
373370 elif datatype == 0x08 : # u64
374- data = self .read_unit64 ()
371+ data = self ._buffer . read_unit64 ()
375372
376373 elif datatype == 0x09 : # vint
377374 data = self .read_vint ()
0 commit comments