summaryrefslogtreecommitdiff
path: root/cmd_optimization.c
diff options
context:
space:
mode:
authorDominik Kaiser2024-04-16 18:10:54 +0200
committerDominik Kaiser2024-04-16 18:10:54 +0200
commitb8be1fba75a133b159b71a5c3c06436a143e670f (patch)
tree72172f75bea56211555b013122b366721d60f63f /cmd_optimization.c
parent571c2f537954fd0d5deb616380276d1d23049aa9 (diff)
downloadpush_swap-b8be1fba75a133b159b71a5c3c06436a143e670f.tar.gz
push_swap-b8be1fba75a133b159b71a5c3c06436a143e670f.zip
Refactor cmd_optimization
Diffstat (limited to 'cmd_optimization.c')
-rw-r--r--cmd_optimization.c60
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);
}