Skip to content

Commit 063cf2c

Browse files
teodutuCristiMacovei
authored andcommitted
Improve the running time of SandBlaster
Decrease the time complexity of the `build_operation_nodes` function by using a dictionary to reduce its complexity from `O(len(operation_nodes)^2)` to `O(len(operation_nodes))`.
1 parent d417bf9 commit 063cf2c

1 file changed

Lines changed: 5 additions & 7 deletions

File tree

reverse-sandbox/operation_node.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -467,13 +467,11 @@ def build_operation_nodes(f, num_operation_nodes, ios_major_version):
467467
ios_major_version))
468468

469469
# Fill match and unmatch fields for each node in operation_nodes.
470-
for i in range(len(operation_nodes)):
471-
if operation_nodes[i].is_non_terminal():
472-
for j in range(len(operation_nodes)):
473-
if operation_nodes[i].non_terminal.match_offset == operation_nodes[j].offset:
474-
operation_nodes[i].non_terminal.match = operation_nodes[j]
475-
if operation_nodes[i].non_terminal.unmatch_offset == operation_nodes[j].offset:
476-
operation_nodes[i].non_terminal.unmatch = operation_nodes[j]
470+
offsets = {node.offset: node for node in operation_nodes}
471+
for node in operation_nodes:
472+
if node.is_non_terminal():
473+
node.non_terminal.match = offsets[node.non_terminal.match_offset]
474+
node.non_terminal.unmatch = offsets[node.non_terminal.unmatch_offset]
477475

478476
return operation_nodes
479477

0 commit comments

Comments
 (0)