feat: speed up unmarshall (#114)

This commit is contained in:
J. Nick Koston 2022-10-27 10:47:42 -05:00 committed by GitHub
parent 85d2102228
commit e1836b2034
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 9 deletions

View File

@ -73,10 +73,8 @@ cdef class Unmarshaller:
cpdef read_string_unpack(self, object type_)
cdef _read_string_unpack(self)
@cython.locals(
buf_bytes=cython.bytearray,
str_start=cython.uint,
)
cdef _read_string_unpack(self)

View File

@ -267,15 +267,17 @@ class Unmarshaller:
return self._read_variant()
def _read_variant(self) -> Variant:
tree = get_signature_tree(self._read_signature())
signature_type = tree.types[0]
signature = self._read_signature()
# verify in Variant is only useful on construction not unmarshalling
token = signature_type.token
if token == "n":
return Variant(tree, self._read_int16_unpack(), False)
if signature == "n":
return Variant(
get_signature_tree(signature), self._read_int16_unpack(), False
)
tree = get_signature_tree(signature)
signature_type = tree.types[0]
return Variant(
tree,
self._readers[token](self, signature_type),
self._readers[signature_type.token](self, signature_type),
False,
)