miden_debug_engine/exec/
trace_monitor.rs1use std::sync::{Arc, Mutex};
2
3use miden_processor::trace::RowIndex;
4
5#[derive(Default, Clone)]
7pub struct TraceMonitor(Arc<Mutex<TraceMonitorInner>>);
8
9#[derive(Default)]
10struct TraceMonitorInner {
11 events: Vec<(RowIndex, super::TraceEvent)>,
12}
13
14impl TraceMonitor {
15 pub fn handle_event(&self, clock: RowIndex, event: super::TraceEvent) {
16 let mut guard = self.0.lock().unwrap();
17 guard.events.push((clock, event));
18 }
19
20 pub fn has_any_event_occurred_since(&self, since_clock: RowIndex) -> bool {
21 let guard = self.0.lock().unwrap();
22 guard.events.iter().any(|(cycle, _)| *cycle >= since_clock)
23 }
24
25 pub fn has_event_occurred_since<F>(&self, since_cycle: RowIndex, predicate: F) -> bool
26 where
27 F: Fn(super::TraceEvent) -> bool,
28 {
29 let guard = self.0.lock().unwrap();
30 guard
31 .events
32 .iter()
33 .any(move |(cycle, event)| *cycle >= since_cycle && predicate(*event))
34 }
35}