/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* lem_in.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: mndhlovu +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/25 06:31:05 by mndhlovu #+# #+# */ /* Updated: 2019/04/24 09:44:41 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "lem_in.h" static t_node *get_node_role(t_lmdata *data, char role) { t_node *it; it = data->nodes_data; while (it) { if (it->role == role) return (it); it = it->next; } return (NULL); } static int get_nb_paths(t_ind **ret) { int i; i = 0; while (ret[i]) i++; return (i); } static void get_nb_paths_max(t_lmdata *data, int start, int end) { int i; int j; t_ind *it; i = 0; j = 0; it = data->adj[start]; while (it && ++i) it = it->next; it = data->adj[end]; while (it && ++j) it= it->next; data->nb_paths_max = (i > j) ? j : i; } static int lem_in(t_syntax *synt, t_holder *holder, t_lmdata *lmdata, t_ind ***ret) { if (!(lm_parser(synt, lmdata, holder))) return (0); ft_printf("start verify\n"); if (!(lm_verify_cmd(synt, holder, lmdata))) return (0); ft_printf("Number of nodes %d\n", lmdata->nb_nodes); if (!lst_indinit(lmdata)) return (0); ft_printf("plap\n"); if (!(lm_adj_parser(lmdata, holder))) return (0); ft_printf("plop\n"); lm_clear_unv(holder); get_nb_paths_max(lmdata, get_node_role(lmdata, 's')->ind , get_node_role(lmdata, 'e')->ind); if ((*ret = edmonds_karp(lmdata, get_node_role(lmdata, 's')->ind , get_node_role(lmdata, 'e')->ind)) == NULL) return (0); if (!push_ants(lmdata, *ret, get_nb_paths(*ret))) return (0); tablst_inddel(*ret); return (1); } int lm_error_exit(void) { ft_putendl_fd("ERROR", 2); return (1); } int main(int ac, char **av) { t_syntax synt; t_lmdata ldata; t_holder holder; t_ind **ret; (void)av; if (ac == 1) { lm_init_data(&synt, &holder, &ldata); if (!(lem_in(&synt, &holder, &ldata, &ret))) { lm_clean_data(&ldata); return (lm_error_exit()); } lm_clean_data(&ldata); return (0); } return (1); }