@@ -176,7 +176,7 @@ def byte_align(self):
176
176
177
177
def read_uint8 (self ):
178
178
""" Returns the next 8 bits as an unsigned integer """
179
- data = self ._buffer .read_uint8 ( )
179
+ data = ord ( self ._buffer .read ( 1 ) )
180
180
181
181
if self ._bit_shift != 0 :
182
182
lo_mask , hi_mask = self ._bit_masks [self ._bit_shift ]
@@ -231,7 +231,7 @@ def read_uint64(self):
231
231
232
232
def read_vint (self ):
233
233
""" Reads a signed integer of variable length """
234
- byte = self .read_uint8 ( )
234
+ byte = ord ( self ._buffer . read ( 1 ) )
235
235
negative = byte & 0x01
236
236
result = (byte & 0x7F ) >> 1
237
237
bits = 6
@@ -335,8 +335,8 @@ def read_struct(self, datatype=None):
335
335
""" Reads a nested data structure. If the type is not specified the
336
336
first byte is used as the type identifier.
337
337
"""
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
340
340
341
341
if datatype == 0x00 : # array
342
342
data = [self .read_struct () for i in range (self .read_vint ())]
@@ -347,31 +347,28 @@ def read_struct(self, datatype=None):
347
347
348
348
elif datatype == 0x02 : # blob
349
349
length = self .read_vint ()
350
- data = self .read_bytes (length )
350
+ data = self ._buffer . read_bytes (length )
351
351
352
352
elif datatype == 0x03 : # choice
353
353
flag = self .read_vint ()
354
354
data = self .read_struct ()
355
355
356
356
elif datatype == 0x04 : # optional
357
- exists = self .read_uint8 () != 0
357
+ exists = self ._buffer . read_uint8 () != 0
358
358
data = self .read_struct () if exists else None
359
359
360
360
elif datatype == 0x05 : # Struct
361
- data = OrderedDict ()
362
361
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 )])
366
363
367
364
elif datatype == 0x06 : # u8
368
- data = self .read_uint8 ( )
365
+ data = ord ( self ._buffer . read ( 1 ) )
369
366
370
367
elif datatype == 0x07 : # u32
371
- data = self .read_bytes (4 ) # self.read_uint32()
368
+ data = self ._buffer . read_bytes (4 ) # self.read_uint32()
372
369
373
370
elif datatype == 0x08 : # u64
374
- data = self .read_unit64 ()
371
+ data = self ._buffer . read_unit64 ()
375
372
376
373
elif datatype == 0x09 : # vint
377
374
data = self .read_vint ()
0 commit comments