SUBPROJECTS := Libft
-INCDIR := src_checker
+INCDIR := src
SUBINCDIR := $(addsuffix /inc, $(SUBPROJECTS));
INCLUDE := $(addprefix -I, $(INCDIR) $(SUBINCDIR))
-CHECKSRCDIR := src_checker
+CHECKSRCDIR := src
+
+PUSHSRCDIR = src
CHECKSOURCES := checker.c \
actions.c \
stack_manipulation.c \
+ arg_parsing.c \
CHECKSOURCES := $(addprefix $(CHECKSRCDIR)/, $(CHECKSOURCES))
CHECKOBJECTS := $(CHECKSOURCES:.c=.o)
-PUSHSRCDIR = src_push
-
PUSHSOURCES := push.c \
PUSHSOURCES := $(addprefix $(PUSHSRCDIR)/, $(PUSHSOURCES))
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* arg_parsing.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2024/01/31 09:58:54 by ljiriste #+# #+# */
+/* Updated: 2024/02/06 12:34:29 by ljiriste ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "checker.h"
+#include <stdlib.h>
+
+static int is_int(const char *str)
+{
+ char *test;
+
+ test = ft_itoa(ft_atoi(str));
+ if (ft_strcmp(str, test))
+ {
+ free(test);
+ return (0);
+ }
+ free(test);
+ return (1);
+}
+
+static int contains(int new, t_stack *s)
+{
+ const size_t start_ind = s->ind;
+ int cur;
+
+ if (s->stack.size == 0)
+ return (0);
+ cur = stack_top(s);
+ if (cur == new)
+ return (1);
+ stack_rotate(s, 1);
+ while (s->ind != start_ind)
+ {
+ cur = stack_top(s);
+ if (cur == new)
+ return (1);
+ stack_rotate(s, 1);
+ }
+ return (0);
+}
+
+int parse(int argc, char **argv, t_stack *s)
+{
+ size_t i;
+ int new;
+
+ if (argc == 1)
+ return (1);
+ i = 1;
+ while (i < (size_t)argc)
+ {
+ if (!is_int(argv[i]))
+ return (1);
+ new = ft_atoi(argv[i]);
+ if (contains(new, s))
+ return (1);
+ stack_push(s, new);
+ stack_rotate(s, 1);
+ ++i;
+ }
+ return (0);
+}
/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/24 10:31:06 by ljiriste #+# #+# */
-/* Updated: 2024/01/24 14:41:00 by ljiriste ### ########.fr */
+/* Updated: 2024/02/06 13:19:15 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#define COMMANDS_NUM 11
-static int command_parse(const char *input, t_command *command)
+static int command_exists(const char *input)
{
- const size_t len = ft_strlen(input);
- const char *com_str[COMMANDS_NUM] = {"sa", "sb", "ss", "pa", "pb", "ra", "rb", "rr", "rra", "rrb", "rrr"};
size_t i;
+ const char *com_str[COMMANDS_NUM]
+ = {"sa", "sb", "ss", "pa", "pb", "ra", "rb", "rr", "rra", "rrb", "rrr"};
i = 0;
- while (1)
+ while (i < COMMANDS_NUM)
{
if (!ft_strcmp(input, com_str[i++]))
break ;
if (i == COMMANDS_NUM)
- return (1);
+ return (0);
}
+ return (1);
+}
+
+static int command_parse(const char *input, t_command *command)
+{
+ const size_t len = ft_strlen(input);
+
+ if (!command_exists(input))
+ return (1);
if (len == 3)
command->action = action_reverse_rotate;
else if (input[0] == 's')
int is_sorted(t_stack *s)
{
- const size_t start_ind = s->ind;
- int prev;
- int cur;
+ const size_t start_ind = s->ind;
+ int prev;
+ int cur;
prev = stack_top(s);
stack_rotate(s, 1);
return (1);
}
-int is_int(const char *str)
-{
- char *test;
-
- test = ft_itoa(ft_atoi(str));
- if (ft_strcmp(str, test))
- {
- free(test);
- return (0);
- }
- free(test);
- return (1);
-}
-
-int contains(int new, t_stack *s)
-{
- const size_t start_ind = s->ind;
- int cur;
-
- if (s->stack.size == 0)
- return (0);
- cur = stack_top(s);
- if (cur == new)
- return (1);
- stack_rotate(s, 1);
- while (s->ind != start_ind)
- {
- cur = stack_top(s);
- if (cur == new)
- return (1);
- stack_rotate(s, 1);
- }
- return (0);
-}
-
-int parse(int argc, char **argv, t_stack *s)
-{
- size_t i;
- int new;
-
- if (argc == 1)
- return (1);
- i = 1;
- while (i < (size_t)argc)
- {
- if (!is_int(argv[i]))
- return (1);
- new = ft_atoi(argv[i]);
- if (contains(new, s))
- return (1);
- stack_push(s, new);
- stack_rotate(s, 1);
- ++i;
- }
- return (0);
-}
-
void clean_up(t_stacks *s)
{
free_stack(&s->a);
/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/24 12:13:51 by ljiriste #+# #+# */
-/* Updated: 2024/01/24 12:21:55 by ljiriste ### ########.fr */
+/* Updated: 2024/01/31 09:59:33 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
both,
} t_target;
-typedef void(t_action(t_stacks *s, t_target target));
+typedef void (t_action(t_stacks *s, t_target target));
typedef struct s_command
{
- t_action *action;
+ t_action *action;
t_target target;
} t_command;
+/*
t_action action_push;
t_action action_swap;
t_action action_rotate;
t_action action_reverse_rotate;
+*/
+
+void action_push(t_stacks *s, t_target target);
+void action_swap(t_stacks *s, t_target target);
+void action_rotate(t_stacks *s, t_target target);
+void action_reverse_rotate(t_stacks *s, t_target target);
void stack_push(t_stack *s, int el);
void stack_swap(t_stack *s);
void stack_pop(t_stack *s);
int stack_top(t_stack *s);
+int parse(int argc, char **argv, t_stack *s);
#endif //CHECKER_H