aboutsummaryrefslogtreecommitdiff
path: root/src/common/parse.c
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-01-19 14:21:53 +0100
committerCharles <sircharlesaze@gmail.com>2020-01-19 14:21:53 +0100
commit6be6c78c8856b14c19a1958dfa3993cc0ced1b3f (patch)
tree68871b12df49d623dda8cfcbda0da810045608e4 /src/common/parse.c
parent2b4327b7a448228f67a054b4bdaa3f84b9db2164 (diff)
downloadpush_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.c49
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);
+}