Fix node merging causing crashes
authorLukáš Jiřiště <gymnazium.jiriste@gmail.com>
Sat, 29 Mar 2025 14:59:21 +0000 (15:59 +0100)
committerLukáš Jiřiště <gymnazium.jiriste@gmail.com>
Sat, 29 Mar 2025 14:59:21 +0000 (15:59 +0100)
TODO
src/build_helper.c

diff --git a/TODO b/TODO
index f80ad086ea337c54a410240fa4ffe2c39d3594cb..5dae8bf1ccf230f88b475fcfc8679012e959e7d4 100644 (file)
--- 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
index b8557cac71e52c7bda16ac429855f73be2f91275..eb7f73f4af050bbf68911df7057dad9b115ee8ff 100644 (file)
@@ -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 ;