Skip to content

Commit 6f8cfe8

Browse files
committed
refactor: internal use area deserialisation
1 parent bc7368c commit 6f8cfe8

1 file changed

Lines changed: 8 additions & 16 deletions

File tree

frugy/fru.py

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -107,27 +107,19 @@ def deserialize(self, input):
107107
# The internal record does not have a length field in it,
108108
# and it is just a byte array. So we have to find the start
109109
# of the next record and slice the input on that boundary.
110-
end_of_internal = 0;
111-
internal_use_offset = 0
112-
offset_list = []
113-
for k, v in self.header.to_dict().items():
114-
if v and k == 'internal_use_offs':
115-
internal_use_offset = v
116-
offset_list.append(v)
117-
offset_list.sort()
118-
119-
if internal_use_offset != 0:
120-
index = offset_list.index(internal_use_offset)
121-
# Check it isn't the last on the list
122-
if index != len(offset_list) - 1:
123-
end_of_internal = offset_list[index + 1]
110+
offsets = self.header.to_dict()
111+
if "internal_use_offs" in offsets:
112+
internal_use_start = offsets["internal_use_offs"]
113+
internal_use_end = next(
114+
(o for o in sorted(offsets.values()) if o > internal_use_start), None
115+
)
124116

125117
for k, v in self.header.to_dict().items():
126118
if v:
127119
obj_name = self._area_table_lookup.inverse[k]
128120
obj = self.factory(obj_name)
129-
if k == 'internal_use_offs' and end_of_internal != 0:
130-
obj.deserialize(input[v:end_of_internal])
121+
if k == "internal_use_offs" and internal_use_end is not None:
122+
obj.deserialize(input[v:internal_use_end])
131123
else:
132124
obj.deserialize(input[v:])
133125
self.areas[obj_name] = obj

0 commit comments

Comments
 (0)