From f81202d509bebf98a986113c1b7a087cd32c43d8 Mon Sep 17 00:00:00 2001 From: Daniel Jones Date: Wed, 24 Jun 2020 13:00:30 +0930 Subject: logic: now recursively updates gates when a change is made by keeping track of all connected gates --- MainWindow.cpp | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'MainWindow.cpp') diff --git a/MainWindow.cpp b/MainWindow.cpp index 91fd4a4..3a5f359 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -146,11 +146,13 @@ MainWindow::draw() Gate *gate1; /* update every gate */ + /* for(auto g1 = gates.begin(); g1 != gates.end(); ++g1) { gate1 = (*g1).get(); gate1->update_state(); } + */ /* draw gates */ for(auto g1 = gates.begin(); g1 != gates.end(); ++g1) @@ -357,6 +359,24 @@ Gate return gate; } +void +MainWindow::update_gate_state(Gate *gate) +{ + gate->update_state(); + /* update all gates that are using this gate as an input */ + Gate *gate2; + printf("out gate size: %ld\n", gate->get_output_gates()->size()); + for(auto g = gate->get_output_gates()->begin(); g != gate->get_output_gates()->end(); ++g) + { + gate2 = find_gate_by_id((*g)); + if (gate2) + { + printf("updating gate %p from gate %p\n", gate2, gate); + update_gate_state(gate2); + } + } + +} long MainWindow::on_paint(FXObject*, FXSelector, void *ptr) @@ -391,7 +411,8 @@ MainWindow::on_left_mouse_down(FXObject*, FXSelector, void *ptr) { dragging_link = true; } - gate->update_state(); + //gate->update_state(); + update_gate_state(gate); } else { @@ -444,7 +465,10 @@ MainWindow::on_left_mouse_up(FXObject*, FXSelector, void *ptr) } } //selected_gate->set_output_gate(gate); - gate->update_state(); + selected_gate->add_output_gate_id(gate->get_id()); + printf("adding output gate"); + //gate->update_state(); + update_gate_state(gate); } dragging_link = false; } @@ -465,7 +489,8 @@ MainWindow::on_right_mouse_down(FXObject*, FXSelector, void *ptr) gate->set_state(!gate->get_output_state()); } } - gate->update_state(); + //gate->update_state(); + update_gate_state(gate); draw(); return 1; -- cgit v1.2.3