From 2b4327b7a448228f67a054b4bdaa3f84b9db2164 Mon Sep 17 00:00:00 2001 From: Charles Date: Sun, 19 Jan 2020 08:38:07 +0100 Subject: refactored stack functions and checking for duplicates in args --- src/checker/check.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) (limited to 'src/checker/check.c') diff --git a/src/checker/check.c b/src/checker/check.c index 35bd992..125fdb7 100644 --- a/src/checker/check.c +++ b/src/checker/check.c @@ -6,7 +6,7 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/01/18 10:16:08 by cacharle #+# #+# */ -/* Updated: 2020/01/18 12:04:41 by cacharle ### ########.fr */ +/* Updated: 2020/01/19 07:11:05 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -45,17 +45,17 @@ t_status read_action(t_stack *a, t_stack *b) } static t_action g_actions[] = { - {"sa", FLAG_ARG_A, {.arg_1 = &swap_a}}, - {"sb", FLAG_ARG_B, {.arg_1 = &swap_b}}, - {"ss", FLAG_ARG_A_B, {.arg_2 = &swap_both}}, - {"pa", FLAG_ARG_A_B, {.arg_2 = &push_a}}, - {"pb", FLAG_ARG_B_A, {.arg_2 = &push_a}}, - {"ra", FLAG_ARG_A, {.arg_1 = &rotate_a}}, - {"rb", FLAG_ARG_B, {.arg_1 = &rotate_b}}, - {"rr", FLAG_ARG_A_B, {.arg_2 = &rotate_both}}, - {"rra", FLAG_ARG_A, {.arg_1 = &reverse_rotate_a}}, - {"rrb", FLAG_ARG_B, {.arg_1 = &reverse_rotate_b}}, - {"rrr", FLAG_ARG_A_B, {.arg_2 = &reverse_rotate_both}}, + {"sa", FLAG_ARG_A, {.arg_1 = &stack_swap}}, + {"sb", FLAG_ARG_B, {.arg_1 = &stack_swap}}, + {"ss", FLAG_ARG_A_B, {.arg_2 = &stack_swap_2}}, + {"pa", FLAG_ARG_A_B, {.arg_2 = &stack_push_to}}, + {"pb", FLAG_ARG_B_A, {.arg_2 = &stack_push_to}}, + {"ra", FLAG_ARG_A, {.arg_1 = &stack_rotate}}, + {"rb", FLAG_ARG_B, {.arg_1 = &stack_rotate}}, + {"rr", FLAG_ARG_A_B, {.arg_2 = &stack_rotate_2}}, + {"rra", FLAG_ARG_A, {.arg_1 = &stack_reverse_rotate}}, + {"rrb", FLAG_ARG_B, {.arg_1 = &stack_reverse_rotate}}, + {"rrr", FLAG_ARG_A_B, {.arg_2 = &stack_reverse_rotate_2}}, }; #define ACTIONS_SIZE (sizeof(g_actions) / sizeof(t_action)) @@ -65,18 +65,21 @@ t_status exec_action(char action_id[ACTION_ID_BUF_SIZE], { int i; - printf("action id %s\n", action_id); i = 0; while (ft_strcmp(action_id, g_actions[i].id) != 0) i++; if (i == ACTIONS_SIZE) return (STATUS_ERROR); - if (g_actions[i].args & FLAG_ARG_A) + if (g_actions[i].args == FLAG_ARG_A) g_actions[i].func.arg_1(a); - else if (g_actions[i].args & FLAG_ARG_B) + else if (g_actions[i].args == FLAG_ARG_B) g_actions[i].func.arg_1(b); - else if (g_actions[i].args & FLAG_ARG_A_B) + else if (g_actions[i].args == FLAG_ARG_A_B) g_actions[i].func.arg_2(a, b); + else if (g_actions[i].args == FLAG_ARG_B_A) + g_actions[i].func.arg_2(b, a); + else + return (STATUS_ERROR); return (STATUS_SUCCESS); } @@ -87,7 +90,7 @@ t_bool stack_sorted(t_stack *stack) if (stack_length(stack) < 2) return (TRUE); i = -1; - while (++i < stack->top - 1) + while (++i < stack->top) if (stack->elements[i] > stack->elements[i + 1]) return (FALSE); return (TRUE); -- cgit