From d6aa9a399b2c6ce7f7a7cab9fe9ee45bbed38333 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Luk=C3=A1=C5=A1=20Ji=C5=99i=C5=A1t=C4=9B?= Date: Sat, 29 Mar 2025 15:59:21 +0100 Subject: [PATCH] Fix node merging causing crashes --- TODO | 2 +- src/build_helper.c | 20 ++++++++------------ 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/TODO b/TODO index f80ad08..5dae8bf 100644 --- a/TODO +++ b/TODO @@ -12,6 +12,6 @@ pass 42 norminette DONE rewrite t_fet and t_node to store indexes insted of pointers to connected parts - - goal shifted a bit, nodes store their ID and FETs have no use for havind ID so far + - goal shifted a bit, nodes store their ID and FETs have no use for having ID so far foundations of logic expand simulator commands diff --git a/src/build_helper.c b/src/build_helper.c index b8557ca..eb7f73f 100644 --- a/src/build_helper.c +++ b/src/build_helper.c @@ -39,26 +39,22 @@ int merge_nodes(t_vec *nodes, t_vec *mosfets, t_node *node1, t_node *node2) t_mosfet *mosfet; t_node_segment *seg; - i = 0; - while (i < node2->connected.size) + while (0 < node2->connected.size) { - mosfet = get_connected(mosfets, &node2->connected, i); + mosfet = get_connected(mosfets, &node2->connected, 0); transfer_mosfet(nodes, mosfet, node2, node1); - ++i; } - i = 0; - while (i < node2->connected_gates.size) + while (0 < node2->connected_gates.size) { - mosfet = get_connected(mosfets, &node2->connected_gates, i); + mosfet = get_connected(mosfets, &node2->connected_gates, 0); transfer_mosfet(nodes, mosfet, node2, node1); - ++i; } i = 0; while (i < node2->segments.size) { seg = ft_vec_access(&node2->segments, i); ft_vec_append(&node1->segments, seg); - ++i; + i++; } remove_node(nodes, node2); return (0); @@ -130,21 +126,21 @@ void bind_fet_node(t_vec *nodes, t_mosfet *mosfet, t_node *node, t_terminal term { mosfet->source = node->id; ft_vec_append(&node->connected, &(mosfet->id)); - if (old_node && ft_vec_find_index(&node->connected, &(mosfet->id), &index, id_equality) == success) + if (old_node && ft_vec_find_index(&old_node->connected, &(mosfet->id), &index, id_equality) == success) ft_vec_forget(&old_node->connected, index); } else if (terminal == drain) { mosfet->drain = node->id; ft_vec_append(&node->connected, &(mosfet->id)); - if (old_node && ft_vec_find_index(&node->connected, &(mosfet->id), &index, id_equality) == success) + if (old_node && ft_vec_find_index(&old_node->connected, &(mosfet->id), &index, id_equality) == success) ft_vec_forget(&old_node->connected, index); } else { mosfet->gate = node->id; ft_vec_append(&node->connected_gates, &(mosfet->id)); - if (old_node && ft_vec_find_index(&node->connected_gates, &(mosfet->id), &index, id_equality) == success) + if (old_node && ft_vec_find_index(&old_node->connected_gates, &(mosfet->id), &index, id_equality) == success) ft_vec_forget(&old_node->connected_gates, index); } return ; -- 2.30.2