mini transformation dans les actions qui a tout casse

This commit is contained in:
hugogogo
2021-06-12 14:26:15 +02:00
parent ca0bf0cb61
commit 889c3f4a99
11 changed files with 86 additions and 48 deletions

View File

@@ -1,25 +1,9 @@
#include "pushswap.h"
void sa(t_list *pack)
{
t_stack *stack_a;
t_list **solution;
int tmp;
stack_a = pack->content;
solution = pack->next->next->content;
if (!stack_a->next)
return ;
tmp = stack_a->n;
stack_a->n = stack_a->next->n;
stack_a->next->n = tmp;
(*solution)->content = ft_strdup("sa");
ft_lstadd_back(solution, ft_lstnew(NULL));
}
/*
** this function
** this function is only used to print the stack and the action
** then it launch the action (swap, push, rotate)
*/
void action(t_list *pack, void (*sp)(t_list *pack))
@@ -27,16 +11,38 @@ void action(t_list *pack, void (*sp)(t_list *pack))
t_stack *stack_a;
t_stack *stack_b;
t_list **solution;
int flag;
stack_a = pack->content;
stack_b = pack->next->content;
solution = pack->next->next->content;
print_stack(stack_a);
print_stack(stack_b);
flag = *(int *)(pack->next->next->next->content); // this is a really ugly line :p it's because lst->content is a void*, but we need an int
if (!flag) // if flag == 0, don't print anything
return ;
if (!*solution) // to print only at first call
{
print_stack(stack_a, 'a');
print_stack(stack_b, 'b');
}
sp(pack); // the action to execute
ft_printf("%s\n", (*solution)->content);
sp(pack);
print_stack(stack_a, 'a');
print_stack(stack_b, 'b');
}
t_list *do_pack(t_stack *stack_a, int flag)
{
t_stack *stack_b;
t_list *pack;
if(!(stack_b = ft_calloc(1, sizeof(t_stack))))
ps_stop(stack_a, stack_b, NULL, 2);
pack = ft_lstnew(stack_a);
ft_lstadd_back(&pack, ft_lstnew(stack_b));
ft_lstadd_back(&pack, ft_lstnew(NULL));
ft_lstadd_back(&pack, ft_lstnew(&flag));
return (pack);
}
/*
** this function create the structures "solution" and "stack_b"
@@ -48,21 +54,13 @@ void action(t_list *pack, void (*sp)(t_list *pack))
** then it calls the algorithm
*/
t_list *sort_algo(t_stack *stack_a)
t_list *sort_algo(t_stack *stack, int flag)
{
t_stack *stack_b;
t_list *solution;
t_list *pack;
solution = ft_lstnew(NULL);
if(!(stack_b = ft_calloc(1, sizeof(t_stack))))
ps_stop(stack_a, stack_b, solution, 2);
pack = ft_lstnew(stack_a);
ft_lstadd_back(&pack, ft_lstnew(stack_b));
ft_lstadd_back(&pack, ft_lstnew(&solution));
pack = do_pack(stack, flag);
action(pack, sa);
action(pack, sa);
print_stack(stack_a);
print_stack(stack_b);
// sa(stack_a, stack_b, &solution);
// sb(stack_a, stack_b, &solution);
// ss(stack_a, stack_b, &solution);
@@ -74,5 +72,8 @@ t_list *sort_algo(t_stack *stack_a)
// rra(stack_a, stack_b, &solution);
// rrb(stack_a, stack_b, &solution);
// rrr(stack_a, stack_b, &solution);
return (solution);
if (flag)
ft_putchar('\n');
ps_stop(NULL, pack->next->content, NULL, -1); // pack->next->content is stack_b
return (pack->next->next->content); // pack->next->next->content is t_list *solution
}