/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* lm_mem_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: mndhlovu +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/25 06:31:37 by mndhlovu #+# #+# */ /* Updated: 2019/04/26 09:33:50 by mndhlovu ### ########.fr */ /* */ /* ************************************************************************** */ #include "lem_in.h" void lm_init_data(t_syntax *synt, t_holder *holder, t_lmdata *ldata) { synt->nb_state = 0; synt->s_cmd = 0; synt->e_cmd = 0; synt->s_error = 0; synt->e_error = 0; synt->v_error = 0; synt->l_error = 0; synt->s_vert = 0; synt->e_vert = 0; synt->gr_status = 0; synt->s_pos = 0; synt->e_pos = 0; synt->v_flag = 0; holder->count = 0; holder->data = NULL; ldata->nbants = 0; ldata->nb_nodes = 0; ldata->nodes_data = NULL; ldata->adj = NULL; ldata->map = NULL; } static void lm_add_vertex_sub(t_lmdata *ldata, t_node *new) { t_node *tmp; if (ldata->nodes_data == NULL) ldata->nodes_data = new; else { tmp = ldata->nodes_data; while (tmp->next) tmp = tmp->next; tmp->next = new; } (ldata->nb_nodes)++; } int lm_add_vertex(t_lmdata *ldata, char *raw, char flag, t_syntax *synt) { char **tab; t_node *new; if (!(new = (t_node *)ft_memalloc(sizeof(t_node)))) return (0); tab = ft_strsplit(raw, ' '); if (tab != NULL) { if (lm_check_room_before(tab, synt)) { if ((new->name = ft_strdup(tab[0])) == NULL) ft_del_words_tables(&tab); if (new->name == NULL) return (0); new->x = ft_atoi(tab[1]); new->y = ft_atoi(tab[2]); new->role = flag; new->ind = ldata->nb_nodes; new->next = NULL; lm_add_vertex_sub(ldata, new); ft_del_words_tables(&tab); return (1); } } return (0); } int lm_find_index(t_lmdata *data, char *str) { t_node *nodes; nodes = data->nodes_data; while (nodes) { if (ft_strequ(nodes->name, str)) return (nodes->ind); nodes = nodes->next; } return (-1); } int lm_ext_conn(t_holder *holder, t_lmdata *data, char *raw) { char **tab; t_temp *temp; int src; int dest; t_temp *new; if (!(new = (t_temp *)ft_memalloc(sizeof(t_temp)))) return (0); tab = ft_strsplit(raw, '-'); if (tab != NULL) { src = lm_find_index(data, tab[0]); dest = lm_find_index(data, tab[1]); if (src == -1 || dest == -1) { ft_del_words_tables(&tab); return 0; } new->src_ind = src; new->dest_ind = dest; new->next = NULL; if (holder->data == NULL) holder->data = new; else { temp = holder->data; while (temp->next) temp = temp->next; temp->next = new; } (holder->count)++; ft_del_words_tables(&tab); return (1); } return (0); }