feat: speed up empty array unmarshall (#96)

This commit is contained in:
J. Nick Koston 2022-10-09 10:44:12 -10:00 committed by GitHub
parent 0ee88e4018
commit 2c6ee99b73
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -321,23 +321,26 @@ class Unmarshaller:
self._pos += array_length
return self._buf[self._pos - array_length : self._pos]
beginning_pos = self._pos
readers = self._readers
if token == "{":
result_dict = {}
beginning_pos = self._pos
child_0 = child_type.children[0]
reader_0 = readers[child_0.token]
child_1 = child_type.children[1]
reader_1 = readers[child_1.token]
reader_1 = self._readers[child_1.token]
reader_0 = self._readers[child_0.token]
while self._pos - beginning_pos < array_length:
self._pos += -self._pos & 7 # align 8
key = reader_0(self, child_0)
result_dict[key] = reader_1(self, child_1)
return result_dict
if array_length == 0:
return []
result_list = []
reader = readers[child_type.token]
beginning_pos = self._pos
reader = self._readers[child_type.token]
while self._pos - beginning_pos < array_length:
result_list.append(reader(self, child_type))
return result_list