#include "philo.h" t_philo *lst_add_philo(t_philo *philo, t_params *params, t_mtx *m_print, int i) { t_philo *new; new = malloc(sizeof(t_philo) * 1); if (new == NULL) return (NULL); new->params = params; new->p_nbr = i + 1; if (pthread_mutex_init(&(new->m_fork), NULL) != 0) return (NULL); new->m_print = m_print; if (philo) philo->next = new; new->prev = philo; return (new); } // looping chained list t_philo *init_chain_philo(t_params *params, t_mtx *m_print) { t_philo *end; t_philo *philo; int i; i = 0; philo = NULL; while (i < params->n_phi) { philo = lst_add_philo(philo, params, m_print, 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 *m_print; params = init_params(ac, av); if (params == NULL) return (NULL); *id = malloc(sizeof(pthread_t) * params->n_phi); if (*id == NULL) return (NULL); m_print = malloc(sizeof(t_mtx)); if (pthread_mutex_init(m_print, NULL) != 0) return (NULL); philo = init_chain_philo(params, m_print); if (philo == NULL) return (NULL); return (philo); }