diff options
| author | Dominik Kaiser | 2024-04-16 18:10:54 +0200 |
|---|---|---|
| committer | Dominik Kaiser | 2024-04-16 18:10:54 +0200 |
| commit | b8be1fba75a133b159b71a5c3c06436a143e670f (patch) | |
| tree | 72172f75bea56211555b013122b366721d60f63f /cmd_optimization.c | |
| parent | 571c2f537954fd0d5deb616380276d1d23049aa9 (diff) | |
| download | push_swap-b8be1fba75a133b159b71a5c3c06436a143e670f.tar.gz push_swap-b8be1fba75a133b159b71a5c3c06436a143e670f.zip | |
Refactor cmd_optimization
Diffstat (limited to 'cmd_optimization.c')
| -rw-r--r-- | cmd_optimization.c | 60 |
1 files changed, 17 insertions, 43 deletions
diff --git a/cmd_optimization.c b/cmd_optimization.c index 2d93252..993ec1b 100644 --- a/cmd_optimization.c +++ b/cmd_optimization.c @@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/13 16:42:34 by dkaiser #+# #+# */ -/* Updated: 2024/04/13 17:31:18 by dkaiser ### ########.fr */ +/* Updated: 2024/04/16 18:10:15 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,42 +14,6 @@ #include "libft/libft.h" #include "push_swap.h" -/* void optimize_commands(t_list **cmds) */ -/* { */ -/* int optimizations; */ -/* t_list *cur; */ -/* t_list *last; */ - -/* optimizations = 0; */ -/* cur = *cmds; */ -/* last = NULL; */ -/* while (cur->next) */ -/* { */ -/* if ((*(enum e_pscmd *)cur->content == PA */ -/* && *(enum e_pscmd *)cur->next->content == PB) */ -/* || (*(enum e_pscmd *)cur->content == PA */ -/* && *(enum e_pscmd *)cur->next->content == PB)) */ -/* { */ -/* if (last) */ -/* last->next = cur->next->next; */ -/* else */ -/* (*cmds)->next = cur->next->next; */ -/* ft_lstdelone(cur->next, free); */ -/* ft_lstdelone(cur, free); */ -/* optimizations++; */ -/* } */ -/* if (!optimizations) */ -/* { */ -/* last = cur; */ -/* cur = cur->next; */ -/* } */ -/* else */ -/* break; */ -/* } */ -/* if (optimizations) */ -/* optimize_commands(cmds); */ -/* } */ - static enum e_pscmd get_cmd(t_list *cmd) { if (cmd) @@ -58,19 +22,21 @@ static enum e_pscmd get_cmd(t_list *cmd) return NO_CMD; } -void optimize_commands(t_list **cmds) +static void optimize_redundant(t_psdata *data, enum e_pscmd cmd1, enum e_pscmd cmd2) { t_list *cur; t_list *last; int optimizations; - cur = *cmds; + cur = data->cmds; last = cur; optimizations = 0; - while (cur->next) + if (!cur) + return ; + while (cur && cur->next) { - if ((get_cmd(cur) == PA && get_cmd(cur->next) == PB) || (get_cmd(cur) == PB && get_cmd(cur->next) == PA)) + if ((get_cmd(cur) == cmd1 && get_cmd(cur->next) == cmd2) || (get_cmd(cur) == cmd2 && get_cmd(cur->next) == cmd1)) { last->next = cur->next->next; ft_lstdelone(cur->next, free); @@ -78,8 +44,16 @@ void optimize_commands(t_list **cmds) optimizations++; } last = last->next; - cur = last->next; + if (last) + cur = last->next; + else + cur = NULL; } if (optimizations) - optimize_commands(cmds); + optimize_redundant(data, cmd1, cmd2); +} + +void optimize_commands(t_psdata *data) +{ + optimize_redundant(data, PA, PB); } |
