feat: small speed up to the unmarshaller (#238)
This commit is contained in:
parent
d449029bd8
commit
b8d0e9be4c
@ -177,14 +177,14 @@ cdef class Unmarshaller:
|
||||
)
|
||||
cdef Variant _read_variant(self)
|
||||
|
||||
cpdef read_array(self, SignatureType type_)
|
||||
|
||||
@cython.locals(
|
||||
beginning_pos=cython.ulong,
|
||||
array_length=cython.uint,
|
||||
child_type=SignatureType,
|
||||
child_0=SignatureType,
|
||||
child_1=SignatureType,
|
||||
)
|
||||
cdef object _read_array(self, SignatureType type_)
|
||||
cpdef object read_array(self, SignatureType type_)
|
||||
|
||||
cpdef read_signature(self, SignatureType type_)
|
||||
|
||||
|
||||
@ -440,12 +440,12 @@ class Unmarshaller:
|
||||
return Variant(SIGNATURE_TREE_N, self._read_int16_unpack(), False)
|
||||
elif signature == "ay":
|
||||
return Variant(
|
||||
SIGNATURE_TREE_AY, self._read_array(SIGNATURE_TREE_AY_TYPES_0), False
|
||||
SIGNATURE_TREE_AY, self.read_array(SIGNATURE_TREE_AY_TYPES_0), False
|
||||
)
|
||||
elif signature == "a{qv}":
|
||||
return Variant(
|
||||
SIGNATURE_TREE_A_QV,
|
||||
self._read_array(SIGNATURE_TREE_A_QV_TYPES_0),
|
||||
self.read_array(SIGNATURE_TREE_A_QV_TYPES_0),
|
||||
False,
|
||||
)
|
||||
elif signature == "s":
|
||||
@ -456,17 +456,17 @@ class Unmarshaller:
|
||||
return Variant(SIGNATURE_TREE_O, self._read_string_unpack(), False)
|
||||
elif signature == "as":
|
||||
return Variant(
|
||||
SIGNATURE_TREE_AS, self._read_array(SIGNATURE_TREE_AS_TYPES_0), False
|
||||
SIGNATURE_TREE_AS, self.read_array(SIGNATURE_TREE_AS_TYPES_0), False
|
||||
)
|
||||
elif signature == "a{sv}":
|
||||
return Variant(
|
||||
SIGNATURE_TREE_A_SV,
|
||||
self._read_array(SIGNATURE_TREE_A_SV_TYPES_0),
|
||||
self.read_array(SIGNATURE_TREE_A_SV_TYPES_0),
|
||||
False,
|
||||
)
|
||||
elif signature == "ao":
|
||||
return Variant(
|
||||
SIGNATURE_TREE_AO, self._read_array(SIGNATURE_TREE_AO_TYPES_0), False
|
||||
SIGNATURE_TREE_AO, self.read_array(SIGNATURE_TREE_AO_TYPES_0), False
|
||||
)
|
||||
elif signature == "u":
|
||||
return Variant(SIGNATURE_TREE_U, self._read_uint32_unpack(), False)
|
||||
@ -495,9 +495,6 @@ class Unmarshaller:
|
||||
), self._readers[type_.children[1].token](self, type_.children[1])
|
||||
|
||||
def read_array(self, type_: _SignatureType) -> Iterable[Any]:
|
||||
return self._read_array(type_)
|
||||
|
||||
def _read_array(self, type_: _SignatureType) -> Iterable[Any]:
|
||||
self._pos += -self._pos & 3 # align 4 for the array
|
||||
self._pos += (
|
||||
-self._pos & (UINT32_SIZE - 1)
|
||||
@ -547,7 +544,7 @@ class Unmarshaller:
|
||||
while self._pos - beginning_pos < array_length:
|
||||
self._pos += -self._pos & 7 # align 8
|
||||
key = self._read_string_unpack()
|
||||
result_dict[key] = self._read_array(child_1)
|
||||
result_dict[key] = self.read_array(child_1)
|
||||
else:
|
||||
reader_1 = self._readers[child_1_token]
|
||||
reader_0 = self._readers[child_0_token]
|
||||
@ -680,24 +677,24 @@ class Unmarshaller:
|
||||
tree = SIGNATURE_TREE_SA_SV_AS
|
||||
body = [
|
||||
self._read_string_unpack(),
|
||||
self._read_array(SIGNATURE_TREE_SA_SV_AS_TYPES_1),
|
||||
self._read_array(SIGNATURE_TREE_SA_SV_AS_TYPES_2),
|
||||
self.read_array(SIGNATURE_TREE_SA_SV_AS_TYPES_1),
|
||||
self.read_array(SIGNATURE_TREE_SA_SV_AS_TYPES_2),
|
||||
]
|
||||
elif signature == "oa{sa{sv}}":
|
||||
tree = SIGNATURE_TREE_OA_SA_SV
|
||||
body = [
|
||||
self._read_string_unpack(),
|
||||
self._read_array(SIGNATURE_TREE_OA_SA_SV_TYPES_1),
|
||||
self.read_array(SIGNATURE_TREE_OA_SA_SV_TYPES_1),
|
||||
]
|
||||
elif signature == "oas":
|
||||
tree = SIGNATURE_TREE_OAS
|
||||
body = [
|
||||
self._read_string_unpack(),
|
||||
self._read_array(SIGNATURE_TREE_OAS_TYPES_1),
|
||||
self.read_array(SIGNATURE_TREE_OAS_TYPES_1),
|
||||
]
|
||||
elif signature == "a{oa{sa{sv}}}":
|
||||
tree = SIGNATURE_TREE_A_OA_SA_SV
|
||||
body = [self._read_array(SIGNATURE_TREE_A_OA_SA_SV_TYPES_0)]
|
||||
body = [self.read_array(SIGNATURE_TREE_A_OA_SA_SV_TYPES_0)]
|
||||
elif signature == "o":
|
||||
tree = SIGNATURE_TREE_O
|
||||
body = [self._read_string_unpack()]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user