lem_in/srcs/lem_in.c
Mthandazo Ndhlovu eb85b914a4 Leaks and error checking almost done
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.
2019-04-11 12:52:14 +02:00

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);
}