diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-01-19 14:21:53 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-01-19 14:21:53 +0100 |
| commit | 6be6c78c8856b14c19a1958dfa3993cc0ced1b3f (patch) | |
| tree | 68871b12df49d623dda8cfcbda0da810045608e4 /src/common/parse.c | |
| parent | 2b4327b7a448228f67a054b4bdaa3f84b9db2164 (diff) | |
| download | push_swap-6be6c78c8856b14c19a1958dfa3993cc0ced1b3f.tar.gz push_swap-6be6c78c8856b14c19a1958dfa3993cc0ced1b3f.tar.bz2 push_swap-6be6c78c8856b14c19a1958dfa3993cc0ced1b3f.zip | |
Added stack operation visualizer, random stack generator, quick sort of some sort (WIP)
Diffstat (limited to 'src/common/parse.c')
| -rw-r--r-- | src/common/parse.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/common/parse.c b/src/common/parse.c new file mode 100644 index 0000000..b0415cd --- /dev/null +++ b/src/common/parse.c @@ -0,0 +1,49 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* parse.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/01/19 09:03:28 by cacharle #+# #+# */ +/* Updated: 2020/01/19 13:33:17 by cacharle ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "common.h" + +static t_status has_dup(int *xs, size_t size) +{ + int *tmp; + t_status ret; + + if ((tmp = (int*)malloc(size * sizeof(int))) == NULL) + return (STATUS_ERROR); + ft_memcpy(tmp, xs, size * sizeof(int)); + ret = ft_is_set(tmp, size, sizeof(int), &ft_compar_int) ? + STATUS_SUCCESS : STATUS_FAILURE; + free(tmp); + return (ret); +} + +t_status parse(int argc, char **argv, t_stack *a) +{ + while (--argc >= 1) + { + errno = 0; + stack_push(a, ft_strict_atoi(argv[argc])); + if (errno != 0) + { + ft_putendl_fd("Error", STDERR_FILENO); + stack_destroy(a); + return (STATUS_FAILURE); + } + } + if (has_dup(a->elements, stack_length(a)) != STATUS_SUCCESS) + { + ft_putendl_fd("Error", STDERR_FILENO); + stack_destroy(a); + return (STATUS_FAILURE); + } + return (STATUS_SUCCESS); +} |
