function to clean traces of holder is done. Error checking before adjacency list creation is done also. Now focusing on breaking the parser with invalid maps. It should be ready in a day.
84 lines
2.1 KiB
C
84 lines
2.1 KiB
C
/* ************************************************************************** */
|
|
/* */
|
|
/* ::: :::::::: */
|
|
/* lem_in.c :+: :+: :+: */
|
|
/* +:+ +:+ +:+ */
|
|
/* By: mndhlovu <marvin@42.fr> +#+ +:+ +#+ */
|
|
/* +#+#+#+#+#+ +#+ */
|
|
/* Created: 2019/03/25 06:31:05 by mndhlovu #+# #+# */
|
|
/* Updated: 2019/04/11 12:48:07 by mndhlovu ### ########.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 int lem_in(t_syntax *synt, t_holder *holder,
|
|
t_lmdata *lmdata, t_ind ***ret)
|
|
{
|
|
if (!(lm_parser(synt, lmdata, holder)))
|
|
return (0);
|
|
if (!(lm_verify_cmd(synt, holder, data)))
|
|
return (0);
|
|
if (!lst_indinit(lmdata))
|
|
return (0);
|
|
if (!(lm_adj_parser(lmdata, holder)))
|
|
return (0);
|
|
lm_clear_unv(holder);
|
|
if ((*ret = edmunds_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)))
|
|
return (lm_error_exit());
|
|
lm_clean_data(&ldata);
|
|
return (0);
|
|
}
|
|
return (1);
|
|
}
|