Compare commits

...

3 Commits

Author SHA1 Message Date
Tanguy MAZE
d85e0873cb added protection on double pipes 2019-04-11 22:34:35 +02:00
Mthandazo Ndhlovu
0495ba9e55 clean up code for when an error occurs
testing with all maps is what is left
2019-04-11 14:11:25 +02:00
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
4 changed files with 54 additions and 14 deletions

View File

@@ -6,13 +6,12 @@
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/03/23 17:31:19 by tmaze #+# #+# */
/* Updated: 2019/04/11 10:50:04 by tmaze ### ########.fr */
/* Updated: 2019/04/11 17:31:09 by tmaze ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef LEM_IN_H
# define LEM_IN_H
# include "libft.h"
# include "limits.h"
@@ -67,9 +66,9 @@ typedef struct s_syntax
int e_error;
int v_error;
int l_error;
int gr_status;
int s_vert;
int e_vert;
int gr_status;
int e_cmd;
int e_pos;
int v_flag;
@@ -99,6 +98,7 @@ int lm_validate(t_syntax *synt, t_lmdata *lmdata);
int lm_parser(t_syntax *synt, t_lmdata *ldata
, t_holder *holder);
int lm_check_room_before(char **tab, t_syntax *synt);
void lm_clear_unv(t_holder *holder);
int lm_add_vertex(t_lmdata *ldata, char *raw, char flag
, t_syntax *synt);
int lm_ext_conn(t_holder *holder, t_lmdata *data
@@ -115,7 +115,8 @@ int lm_validate_rooms(char *name, char *x, char *y);
int lm_adj_parser(t_lmdata *lmdata, t_holder *holder);
void lm_init_data(t_syntax *synt, t_holder *holder
, t_lmdata *ldata);
int lm_verify_cmd(t_syntax *synt, t_holder *holder
, t_lmdata *data);
void lm_initdata(t_lmdata *data);
int lm_getparams(t_lmdata *data);
void lm_clean_data(t_lmdata *data);

View File

@@ -6,7 +6,7 @@
/* By: mndhlovu <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/03/25 06:31:05 by mndhlovu #+# #+# */
/* Updated: 2019/04/11 10:50:40 by tmaze ### ########.fr */
/* Updated: 2019/04/11 12:48:07 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */
@@ -41,10 +41,13 @@ static int lem_in(t_syntax *synt, t_holder *holder,
{
if (!(lm_parser(synt, lmdata, holder)))
return (0);
if (!(lm_verify_cmd(synt, holder, lmdata)))
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);

View File

@@ -6,7 +6,7 @@
/* By: mndhlovu <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/04/02 08:39:09 by mndhlovu #+# #+# */
/* Updated: 2019/04/08 15:43:01 by tmaze ### ########.fr */
/* Updated: 2019/04/11 12:48:13 by mndhlovu ### ########.fr */
/* */
/* ************************************************************************** */
@@ -25,10 +25,29 @@ int lm_check_room_before(char **tab, t_syntax *synt)
return (1);
}
int lm_verify_cmd(t_syntax *synt)
void lm_clear_unv(t_holder *holder)
{
if (synt->s_cmd && synt->e_cmd && synt->v_error
&& synt->l_error && synt->e_error)
return (1);
return (0);
t_temp *data;
t_temp *flush;
data = holder->data;
while (data)
{
flush = data;
data = data->next;
free(flush);
flush = NULL;
}
holder->data = NULL;
}
int lm_verify_cmd(t_syntax *synt, t_holder *holder, t_lmdata *data)
{
if (synt->s_cmd && synt->e_cmd && !synt->v_error
&& !synt->l_error && !synt->e_error && !synt->s_error
&& synt->nb_state && (holder->count > 0)
&& (data->nb_nodes > 0))
return (1);
lm_clear_unv(holder);
return (0);
}

View File

@@ -6,13 +6,29 @@
/* By: mndhlovu <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/03/29 07:17:06 by mndhlovu #+# #+# */
/* Updated: 2019/04/09 18:18:59 by tmaze ### ########.fr */
/* Updated: 2019/04/11 20:34:58 by tmaze ### ########.fr */
/* */
/* ************************************************************************** */
#include "lem_in.h"
int lm_adj_parser(t_lmdata *lmdata, t_holder *holder)
static int is_link_in(t_lmdata *data, int src, int dest)
{
t_ind *it;
if (src < data->nb_nodes)
{
it = data->adj[src];
while (it)
{
if (it->index == dest)
return (1);
it = it->next;
}
}
return (0);
}
int lm_adj_parser(t_lmdata *lmdata, t_holder *holder)
{
t_temp *data;
@@ -23,7 +39,8 @@ int lm_adj_parser(t_lmdata *lmdata, t_holder *holder)
{
while (data)
{
lst_indadd_link(lmdata, data->src_ind, data->dest_ind);
if (!is_link_in(lmdata, data->src_ind, data->dest_ind))
lst_indadd_link(lmdata, data->src_ind, data->dest_ind);
data = data->next;
}
return (1);