diff options
| author | Dominik Kaiser | 2024-04-17 09:53:13 +0200 |
|---|---|---|
| committer | Dominik Kaiser | 2024-04-17 09:53:13 +0200 |
| commit | c16af7775f6d4bb56bb8a0891ec646032f442993 (patch) | |
| tree | f7b39f4d316e0ea5385a2b4d3afb58d0fdeca8f6 /cmd_optimization.c | |
| parent | 4f288f94c8ec8ced5200d2e4e5713d9b119aed48 (diff) | |
| download | push_swap-c16af7775f6d4bb56bb8a0891ec646032f442993.tar.gz push_swap-c16af7775f6d4bb56bb8a0891ec646032f442993.zip | |
Add optimization for double stack ops
Now RA and RB will be optimized to RR
Diffstat (limited to 'cmd_optimization.c')
| -rw-r--r-- | cmd_optimization.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/cmd_optimization.c b/cmd_optimization.c index 2d93252..83e20c0 100644 --- a/cmd_optimization.c +++ b/cmd_optimization.c @@ -6,7 +6,11 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/13 16:42:34 by dkaiser #+# #+# */ +<<<<<<< Updated upstream /* Updated: 2024/04/13 17:31:18 by dkaiser ### ########.fr */ +======= +/* Updated: 2024/04/17 09:41:10 by dkaiser ### ########.fr */ +>>>>>>> Stashed changes /* */ /* ************************************************************************** */ @@ -81,5 +85,47 @@ void optimize_commands(t_list **cmds) cur = last->next; } if (optimizations) +<<<<<<< Updated upstream optimize_commands(cmds); +======= + optimize_redundant(data, cmd1, cmd2); +} + +static void optimize_two_stack_ops(t_psdata *data, enum e_pscmd cmd1, enum e_pscmd cmd2, enum e_pscmd new_cmd) +{ + t_list *cur; + t_list *last; + int optimizations; + + cur = data->cmds; + last = cur; + optimizations = 0; + + if (!cur) + return ; + while (cur && cur->next) + { + if ((get_cmd(cur) == cmd1 && get_cmd(cur->next) == cmd2) || (get_cmd(cur) == cmd2 && get_cmd(cur->next) == cmd1)) + { + last->next = cur->next; + *(enum e_pscmd*)cur->next->content = new_cmd; + ft_lstdelone(cur, free); + optimizations++; + } + last = last->next; + if (last) + cur = last->next; + else + cur = NULL; + } + if (optimizations) + optimize_two_stack_ops(data, cmd1, cmd2, new_cmd); +} + +void optimize_commands(t_psdata *data) +{ + optimize_redundant(data, PA, PB); + optimize_redundant(data, RB, RRB); + optimize_two_stack_ops(data, RA, RB, RR); +>>>>>>> Stashed changes } |
