/ push_swap / push_swap / op_silent1_bonus.c
op_silent1_bonus.c
 1  /* ************************************************************************** */
 2  /*                                                                            */
 3  /*                                                        :::      ::::::::   */
 4  /*   silent_operations1.c                               :+:      :+:    :+:   */
 5  /*                                                    +:+ +:+         +:+     */
 6  /*   By: gychoi <gychoi@student.42seoul.kr>         +#+  +:+       +#+        */
 7  /*                                                +#+#+#+#+#+   +#+           */
 8  /*   Created: 2022/12/07 19:53:34 by gychoi            #+#    #+#             */
 9  /*   Updated: 2022/12/07 20:02:00 by gychoi           ###   ########.fr       */
10  /*                                                                            */
11  /* ************************************************************************** */
12  
13  #include "checker_bonus.h"
14  
15  void	silent_pa(t_deque *deque_a, t_deque *deque_b)
16  {
17  	t_list	*node;
18  
19  	if (deque_b->head == NULL)
20  		return ;
21  	node = deque_b->head;
22  	if (node->next)
23  	{
24  		node->next->prev = NULL;
25  		deque_b->head = node->next;
26  	}
27  	else
28  	{
29  		deque_b->head = NULL;
30  		deque_b->tail = NULL;
31  	}
32  	node->next = deque_a->head;
33  	if (deque_a->head)
34  		deque_a->head->prev = node;
35  	deque_a->head = node;
36  	if (deque_a->tail == NULL)
37  		deque_a->tail = node;
38  	(deque_b->size)--;
39  	(deque_a->size)++;
40  }
41  
42  void	silent_pb(t_deque *deque_a, t_deque *deque_b)
43  {
44  	t_list	*node;
45  
46  	if (deque_a->head == NULL)
47  		return ;
48  	node = deque_a->head;
49  	if (node->next)
50  	{
51  		node->next->prev = NULL;
52  		deque_a->head = node->next;
53  	}
54  	else
55  	{
56  		deque_a->head = NULL;
57  		deque_a->tail = NULL;
58  	}
59  	node->next = deque_b->head;
60  	if (deque_b->head)
61  		deque_b->head->prev = node;
62  	deque_b->head = node;
63  	if (deque_b->tail == NULL)
64  		deque_b->tail = node;
65  	(deque_a->size)--;
66  	(deque_b->size)++;
67  }
68  
69  void	silent_rra(t_deque *deque_a)
70  {
71  	t_list	*node;
72  
73  	if (deque_a->head == deque_a->tail)
74  		return ;
75  	node = deque_a->tail;
76  	deque_a->tail = deque_a->tail->prev;
77  	deque_a->tail->next = NULL;
78  	node->next = deque_a->head;
79  	node->prev = NULL;
80  	deque_a->head->prev = node;
81  	deque_a->head = node;
82  }
83  
84  void	silent_rrb(t_deque *deque_b)
85  {
86  	t_list	*node;
87  
88  	if (deque_b->head == deque_b->tail)
89  		return ;
90  	node = deque_b->tail;
91  	deque_b->tail = deque_b->tail->prev;
92  	deque_b->tail->next = NULL;
93  	node->next = deque_b->head;
94  	node->prev = NULL;
95  	deque_b->head->prev = node;
96  	deque_b->head = node;
97  }