Skip to content

Commit

Permalink
feat: small speed up to the unmarshaller (#238)
Browse files Browse the repository at this point in the history
  • Loading branch information
bdraco authored Sep 6, 2023
1 parent d449029 commit b8d0e9b
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 17 deletions.
6 changes: 3 additions & 3 deletions src/dbus_fast/_private/unmarshaller.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -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_)

Expand Down
25 changes: 11 additions & 14 deletions src/dbus_fast/_private/unmarshaller.py
Original file line number Diff line number Diff line change
Expand Up @@ -440,12 +440,12 @@ def _read_variant(self) -> Variant:
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":
Expand All @@ -456,17 +456,17 @@ def _read_variant(self) -> Variant:
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)
Expand Down Expand Up @@ -495,9 +495,6 @@ def read_dict_entry(self, type_: _SignatureType) -> Tuple[Any, Any]:
), 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)
Expand Down Expand Up @@ -547,7 +544,7 @@ def _read_array(self, type_: _SignatureType) -> Iterable[Any]:
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]
Expand Down Expand Up @@ -680,24 +677,24 @@ def _read_body(self) -> None:
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()]
Expand Down

0 comments on commit b8d0e9b

Please sign in to comment.