Add filtering on branches mid-iteration.
This commit is contained in:
@@ -25,6 +25,7 @@ def main():
|
|||||||
activity_tree,
|
activity_tree,
|
||||||
lambda act: act.id in (2, 5, 10),
|
lambda act: act.id in (2, 5, 10),
|
||||||
lambda act: act.id in (4,),
|
lambda act: act.id in (4,),
|
||||||
|
lambda act: act.id in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
|
||||||
)
|
)
|
||||||
|
|
||||||
while (depth_and_node := match_iter.get_next()) is not None:
|
while (depth_and_node := match_iter.get_next()) is not None:
|
||||||
@@ -61,17 +62,20 @@ class MatchIter:
|
|||||||
stack: deque[StackEntry]
|
stack: deque[StackEntry]
|
||||||
is_match: Callable[[Activity], bool]
|
is_match: Callable[[Activity], bool]
|
||||||
is_transparent: Callable[[Activity], bool]
|
is_transparent: Callable[[Activity], bool]
|
||||||
|
is_alive: Callable[[Activity], bool]
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
activity_tree: ActivityTree,
|
activity_tree: ActivityTree,
|
||||||
is_match: Callable[[Activity], bool],
|
is_match: Callable[[Activity], bool],
|
||||||
is_transparent: Callable[[Activity], bool],
|
is_transparent: Callable[[Activity], bool],
|
||||||
|
is_alive: Callable[[Activity], bool],
|
||||||
) -> None:
|
) -> None:
|
||||||
self.activity_tree = activity_tree
|
self.activity_tree = activity_tree
|
||||||
self.stack = deque([StackEntry(0)])
|
self.stack = deque([StackEntry(0)])
|
||||||
self.is_match = is_match
|
self.is_match = is_match
|
||||||
self.is_transparent = is_transparent
|
self.is_transparent = is_transparent
|
||||||
|
self.is_alive = is_alive
|
||||||
|
|
||||||
def get_next(self) -> tuple[int, bool, bool, Activity] | None:
|
def get_next(self) -> tuple[int, bool, bool, Activity] | None:
|
||||||
if (next_announce := self.get_next_announce()) is not None:
|
if (next_announce := self.get_next_announce()) is not None:
|
||||||
@@ -104,7 +108,9 @@ class MatchIter:
|
|||||||
stack_entry.transparent = self.is_transparent(node)
|
stack_entry.transparent = self.is_transparent(node)
|
||||||
|
|
||||||
children = [
|
children = [
|
||||||
c for c in self.activity_tree.activities.values() if c.parent == node.id
|
c
|
||||||
|
for c in self.activity_tree.activities.values()
|
||||||
|
if c.parent == node.id and self.is_alive(c)
|
||||||
]
|
]
|
||||||
# for c in children:
|
# for c in children:
|
||||||
for c in reversed(children):
|
for c in reversed(children):
|
||||||
|
|||||||
Reference in New Issue
Block a user