#include "philo.h" t_philo *create_each_philo(t_philo *philo, t_params *params, t_mtx *mtx, int i) { t_philo *new; new = malloc(sizeof(t_philo) * 1); if (new == NULL) return (NULL); new->params = params; new->philo_nbr = i + 1; new->fork = 1; new->msg_mtx = mtx; if (philo) philo->next = new; new->prev = philo; return (new); } // looping chained list t_philo *init_chain_philo(t_params *params, t_mtx *mutex) { t_philo *end; t_philo *philo; int i; i = 0; philo = NULL; while (i < params->n_phi) { philo = create_each_philo(philo, params, mutex, i); i++; } end = philo; while (philo->prev != NULL) philo = philo->prev; philo->prev = end; end->next = philo; return (philo); } t_params *init_params(int ac, char **av) { t_params *params; if (ac == 5 || ac == 6) { params = malloc(sizeof(t_params)); params->n_phi = ft_atoi(av[1]); params->t_die = ft_atoi(av[2]); params->t_eat = ft_atoi(av[3]); params->t_slp = ft_atoi(av[4]); if (ac == 6) params->n_eat = ft_atoi(av[5]); } else return (NULL); return (params); } t_philo *init(int ac, char **av, pthread_t **id) { t_philo *philo; t_params *params; t_mtx msg_mtx; params = init_params(ac, av); if (params == NULL) return (NULL); *id = malloc(sizeof(int) * params->n_phi); if (*id == NULL) return (NULL); pthread_mutex_init(&msg_mtx, NULL); philo = init_chain_philo(params, &msg_mtx); if (philo == NULL) return (NULL); return (philo); }