switch to boolean evaluation on boolean signals

This commit is contained in:
Joeri Exelmans 2025-11-05 23:19:24 +01:00
parent b9f104f877
commit a4491b3433
2 changed files with 8 additions and 8 deletions

Binary file not shown.

View file

@ -19,7 +19,7 @@ use std::time::Duration;
use web_sys::console; use web_sys::console;
struct TraceMap<'a> { struct TraceMap<'a> {
traces: HashMap<&'a str, Signal<f64>>, traces: HashMap<&'a str, Signal<bool>>,
} }
impl<'a> Trace for TraceMap<'a> { impl<'a> Trace for TraceMap<'a> {
@ -40,7 +40,7 @@ impl<'a> Trace for TraceMap<'a> {
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
pub struct StateBuddyTraceEntry { pub struct StateBuddyTraceEntry {
simtime: f64, simtime: f64,
state: HashMap<String, f64>, state: HashMap<String, bool>,
// inputEvent: String, // inputEvent: String,
// outputEvents: Vec<String>, // outputEvents: Vec<String>,
} }
@ -57,14 +57,14 @@ pub fn eval_boolean(s: &str, js_trace: JsValue) -> JsValue {
Ok(trace) => trace, Ok(trace) => trace,
Err(e) => return JsValue::from_str(("failed to parse JSON: ".to_owned() + &e.to_string()).as_str()), Err(e) => return JsValue::from_str(("failed to parse JSON: ".to_owned() + &e.to_string()).as_str()),
}; };
let mut traceMap = HashMap::<&str, Signal<f64>>::new(); let mut traceMap = HashMap::<&str, Signal<bool>>::new();
for entry in &trace.entries { for entry in &trace.entries {
for (prop, val) in &entry.state { for (prop, val) in &entry.state {
let signal = traceMap.entry(prop.as_str()).or_insert_with(|| Signal::<f64>::Sampled { let signal: &mut Signal<bool> = traceMap.entry(prop.as_str()).or_insert_with(|| Signal::<bool>::Sampled {
values: vec![], values: vec![],
time_points: vec![], time_points: vec![],
}); });
if let Signal::<f64>::Sampled { values, time_points } = signal { if let Signal::<bool>::Sampled { values, time_points } = signal {
values.push(*val); values.push(*val);
time_points.push(Duration::from_secs(entry.simtime as u64)); time_points.push(Duration::from_secs(entry.simtime as u64));
} }
@ -76,12 +76,12 @@ pub fn eval_boolean(s: &str, js_trace: JsValue) -> JsValue {
let m = TraceMap{traces: traceMap}; let m = TraceMap{traces: traceMap};
for name in m.signal_names() { for name in m.signal_names() {
console::debug_2(&JsValue::from_str("signal name:"), &JsValue::from_str(name)); console::debug_2(&JsValue::from_str("signal name:"), &JsValue::from_str(name));
let signal: &Signal<f64> = m.get(name).expect("bla"); let signal: &Signal<bool> = m.get(name).expect("bla");
if let Signal::<f64>::Sampled { values, time_points } = signal { if let Signal::<bool>::Sampled { values, time_points } = signal {
for i in 0..(values.len()) { for i in 0..(values.len()) {
console::debug_2( console::debug_2(
&JsValue::from_f64(time_points[i].as_millis() as f64), &JsValue::from_f64(time_points[i].as_millis() as f64),
&JsValue::from_f64(values[i])); &JsValue::from_bool(values[i]));
} }
} }
} }