functions standardisees, annotees et readme en cours decriture
This commit is contained in:
91
srcs/push_swap.c
Normal file
91
srcs/push_swap.c
Normal file
@@ -0,0 +1,91 @@
|
||||
|
||||
#include "push_swap.h"
|
||||
|
||||
/*
|
||||
** this function check errors in the arguments
|
||||
** like, is there arguments, and are they a valid list without equals values
|
||||
** if there are no arguments it calls the stop function with value 1 to print usage
|
||||
*/
|
||||
void is_valid(int ac, char **av)
|
||||
{
|
||||
if (ac < 2)
|
||||
ps_stop(NULL, NULL, NULL, 1);
|
||||
(void)av;
|
||||
// check more error
|
||||
}
|
||||
|
||||
/*
|
||||
** this function check if there are flags (currently only one flag) :
|
||||
** -p to print the evolution of the list while the sorting is done
|
||||
*/
|
||||
int check_flag(int *ac, char ***av)
|
||||
{
|
||||
if (ft_strcmp((*av)[1], "-p") != 0)
|
||||
return (0);
|
||||
(*av)++;;
|
||||
(*ac)--;
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
** create the stack for list a, as a linked list, and fill it with the values given in arguments argv
|
||||
*/
|
||||
t_stack *init_stack(int ac, char **av)
|
||||
{
|
||||
t_stack *start;
|
||||
t_stack *tmp;
|
||||
|
||||
tmp = NULL;
|
||||
while (--ac)
|
||||
{
|
||||
if (!(start = ft_calloc(1, sizeof(t_stack))))
|
||||
ps_stop(start, NULL, NULL, 2);
|
||||
start->n = ft_atoi(av[ac]);
|
||||
start->next = tmp;
|
||||
tmp = start;
|
||||
}
|
||||
return (start);
|
||||
}
|
||||
|
||||
/*
|
||||
** this function creates the stack b and the list solution
|
||||
** then it init the list solution with initial values of stack a (in case of flag -p)
|
||||
** then it calls the sorting algorithm
|
||||
** then it calls ps_stop() to free everything that needs to be freed
|
||||
*/
|
||||
t_list *launch_algo(t_stack *a)
|
||||
{
|
||||
t_stack *b;
|
||||
t_list *solution;
|
||||
|
||||
if(!(b = ft_calloc(1, sizeof(t_stack))))
|
||||
ps_stop(a, b, NULL, 2);
|
||||
solution = NULL;
|
||||
fill_solution(a, NULL, &solution, ft_strdup("start"));
|
||||
hugo_sort(&a, &b, &solution);
|
||||
ps_stop(NULL, b, NULL, -1);
|
||||
return (solution);
|
||||
}
|
||||
|
||||
/*
|
||||
** this programme will sort a list
|
||||
** this function first check the validity of the arguments
|
||||
** then it checks for flags (currently only -p)
|
||||
** then it parse the list into a linked list
|
||||
** then it calls the sorting algorithm (it actually calls a launch function that will execute some actions and calls the sorting algorithm)
|
||||
** and finally it frees everything and leaves
|
||||
*/
|
||||
int main(int ac, char **av)
|
||||
{
|
||||
t_stack *stack;
|
||||
t_list *result;
|
||||
int flag;
|
||||
|
||||
is_valid(ac, av);
|
||||
flag = check_flag(&ac, &av);
|
||||
stack = init_stack(ac, av);
|
||||
result = launch_algo(stack);
|
||||
print_result(result, flag);
|
||||
ps_stop(stack, NULL, result, 0);
|
||||
return(0);
|
||||
}
|
||||
Reference in New Issue
Block a user