]> Untitled Git - axy/ft/pushswap.git/commitdiff
Makefile update, ops, and fixes
author= <=>
Wed, 3 Dec 2025 15:05:33 +0000 (16:05 +0100)
committer= <=>
Wed, 3 Dec 2025 15:05:33 +0000 (16:05 +0100)
.gitignore
Makefile
clist.c
main_pushswap.c
ops.c
ops_output.c
pushswap.h
stack.c

index 78fb45056fa52e3e25432eeb73a5c47b9450b8f8..93245e61edefece2f71611811e24fe486c2b2aed 100644 (file)
@@ -1,4 +1,3 @@
-**.out
-**.o
+.obj
 push_swap
 checker
index c26fefc63d862ed47f148585c166155aeb801eae..01878bda6633dc32ae3b9a5e4eabd1f6d49127e1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,17 +2,22 @@ NAME=push_swap
 
 SRCS=cheatalloc.c clist.c main_pushswap.c ops.c ops_output.c ops_p.c ops_r.c ops_rr.c ops_s.c output.c psval.c stack.c stacks.c
 
-OBJS=${SRCS:.c=.o}
+OBJS=${SRCS:%.c=${OBJDIR}/%.o}
 
-CFLAGS=-Wall -Wextra -Werror
+OBJDIR=.obj
+
+CFLAGS=-Wall -Wextra -Werror -g
 
 CC=cc
 
 all : ${NAME}
 
-%.o : %.c
+${OBJDIR}/%.o : %.c | ${OBJDIR}
        ${CC} ${CFLAGS} -c -o $@ $<
 
+${OBJDIR} :
+       mkdir ${OBJDIR}
+
 ${NAME} : ${OBJS}
        cc -o $@ $^
 
@@ -21,11 +26,10 @@ clean :
 
 fclean : clean
        rm -f ${NAME}
+       rmdir ${OBJDIR}
 
 re : fclean all
 
-bonus : ${NAME}
-
 remakefile :
        sed -i "s/^SRCS=.*/$$(echo -n SRCS=; echo -n *.c)/" Makefile
 
diff --git a/clist.c b/clist.c
index 4a78d4b52f1a86a5a26e97878b9304690d712024..4952c8c0b2f53bf0e4cacac81427e59e581cc756 100644 (file)
--- a/clist.c
+++ b/clist.c
@@ -6,7 +6,7 @@
 /*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/12/02 11:02:13 by agilliar          #+#    #+#             */
-/*   Updated: 2025/12/02 23:05:13 by agilliar         ###   ########.fr       */
+/*   Updated: 2025/12/03 16:03:51 by agilliar         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -43,6 +43,7 @@ t_clist       *clist_pop(t_clist **src)
                *src = NULL;
                return (res);
        }
+       *src = res->prev;
        res->next->prev = res->prev;
        res->prev->next = res->next;
        return (res);
@@ -66,8 +67,14 @@ void clist_push(t_clist **dst, t_clist *lst)
 // *dst        : Nullable
 void   clist_push_back(t_clist **dst, t_clist *lst)
 {
-       if (!*dst)
-               *dst = lst;
-       else
-               clist_push(&(*dst)->prev, lst);
+       lst->next = lst;
+       lst->prev = lst;
+       if (*dst)
+       {
+               lst->prev = (*dst)->prev;
+               (*dst)->prev->next = lst;
+               lst->next = *dst;
+               (*dst)->prev = lst;
+       }
+       *dst = lst;
 }
index d5f26ccef4c3fb6091bb4710013d109f7d4fafb9..d0c92f35ae2529810ff7bc567a548d2fb4e9df88 100644 (file)
@@ -6,21 +6,30 @@
 /*   By: agilliar <agilliar@student.42mulhouse.fr>  +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/12/02 22:15:12 by agilliar          #+#    #+#             */
-/*   Updated: 2025/12/03 12:52:57 by agilliar         ###   ########.fr       */
+/*   Updated: 2025/12/03 15:19:10 by agilliar         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include "pushswap.h"
 
+static void    algorithm(const t_stacks *stacks, t_closure clos)
+{
+       (void) stacks;
+       for (t_op i = OP_SA; i <= OP_RRR; i++)
+               (clos.func)(clos.data, i);
+}
+
 int    main(int argc, char **argv)
 {
        t_stacks        stacks;
+       t_ops           ops;
 
        stacks = stacks_new();
+       ops = ops_init();
+       ops_add_output(&ops);
        for (int i = 1; i < argc; i++)
                stack_push_back(&stacks.a, psval_parse(argv[i]));
-       for (int i = 1; i < argc; i++)
-               psval_output(psval_parse(argv[i]));
+       stacks_apply(&stacks, &ops, &algorithm);
        output_flush();
        cheatexit(!stacks_is_solved(&stacks));
 }
diff --git a/ops.c b/ops.c
index b8482003f199af7378b30ca21a549811a77f4141..b3a134daa77fc7f9e9f9f0a77ae07a05083be46a 100644 (file)
--- a/ops.c
+++ b/ops.c
@@ -6,7 +6,7 @@
 /*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/12/03 10:57:30 by agilliar          #+#    #+#             */
-/*   Updated: 2025/12/03 13:12:42 by agilliar         ###   ########.fr       */
+/*   Updated: 2025/12/03 15:07:01 by agilliar         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -31,3 +31,36 @@ t_closure    ops_compose(t_closure first, t_closure second)
        closure.data = data;
        return (closure);
 }
+
+t_ops  ops_init(void)
+{
+       const t_ops     res = {
+               .ops = {
+               ops_sa(),
+               ops_sb(),
+               ops_ss(),
+               ops_pa(),
+               ops_pb(),
+               ops_ra(),
+               ops_rb(),
+               ops_rr(),
+               ops_rra(),
+               ops_rrb(),
+               ops_rrr(),
+       }
+       };
+
+       return (res);
+}
+
+void   ops_add_output(t_ops *ops)
+{
+       t_op    op;
+
+       op = OP_SA;
+       while (op <= OP_RRR)
+       {
+               ops->ops[op] = ops_compose(ops->ops[op], ops_output(op));
+               op++;
+       }
+}
index 15ed67828b377b76be60aca712a8c88243b425b1..b245dfc9e79adc5133b45824ce4da8ecd6d6bf39 100644 (file)
@@ -6,15 +6,22 @@
 /*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/12/03 12:28:28 by agilliar          #+#    #+#             */
-/*   Updated: 2025/12/03 12:34:38 by agilliar         ###   ########.fr       */
+/*   Updated: 2025/12/03 15:01:10 by agilliar         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include "pushswap.h"
 
-static void    ops_output_inner(void *data, t_op op)
+static void    ops_output_inner(const char *data, t_stack stack)
 {
-       const char *const       array[11] = {
+       (void) stack;
+       output_str_ln(data);
+}
+
+t_closure      ops_output(t_op op)
+{
+       t_closure       res;
+       static char     *ops[11] = {
                "sa",
                "sb",
                "ss",
@@ -27,15 +34,8 @@ static void  ops_output_inner(void *data, t_op op)
                "rrb",
                "rrr",
        };
-       (void) data;
-       output_str_ln(array[op]);
-}
-
-t_closure      ops_output(void)
-{
-       t_closure       res;
 
-       res.data = NULL;
+       res.data = ops[op];
        res.func = &ops_output_inner;
        return (res);
 }
index a7eecee83d94bfae84effcdf0574b19d7d15f855..488b2cc355b9059776f5ef2c5b40ccd128b39bb8 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/12/02 11:02:44 by agilliar          #+#    #+#             */
-/*   Updated: 2025/12/03 13:25:21 by agilliar         ###   ########.fr       */
+/*   Updated: 2025/12/03 15:08:03 by agilliar         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -104,8 +104,6 @@ void                stack_move(t_stack *src, t_stack *dst);
 t_psval                psval_parse(const char *s);
 void           psval_output(t_psval val);
 
-t_closure      ops_compose(t_closure first, t_closure second);
-t_closure      ops_output(void);
 t_closure      ops_pa(void);
 t_closure      ops_pb(void);
 t_closure      ops_ra(void);
@@ -118,4 +116,10 @@ t_closure  ops_sa(void);
 t_closure      ops_sb(void);
 t_closure      ops_ss(void);
 
+t_closure      ops_output(t_op op);
+
+t_closure      ops_compose(t_closure first, t_closure second);
+t_ops          ops_init(void);
+void           ops_add_output(t_ops *ops);
+
 #endif
diff --git a/stack.c b/stack.c
index 91071e3b821fef25e2b9d1226b43ad3dc78554c5..09bfe8d247a9ce7ca5463c68df27c7665ee6102e 100644 (file)
--- a/stack.c
+++ b/stack.c
@@ -6,7 +6,7 @@
 /*   By: agilliar <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/12/03 12:53:25 by agilliar          #+#    #+#             */
-/*   Updated: 2025/12/03 13:08:25 by agilliar         ###   ########.fr       */
+/*   Updated: 2025/12/03 15:40:28 by agilliar         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */