From 86b0530bf7692576f8a07b96629de8ca99167454 Mon Sep 17 00:00:00 2001 From: Tanguy MAZE Date: Thu, 11 Apr 2019 11:40:26 +0200 Subject: [PATCH] clean up still in progress eliminated most of the leaks of the parser norming still need to be done --- includes/lem_in.h | 5 ++- srcs/lem_in.c | 40 +++++++++--------- srcs/lm_data_utils.c | 31 +++++++++++--- srcs/lm_mem_utils.c | 18 ++++----- srcs/lm_parser.c | 96 +++++--------------------------------------- srcs/push_ants.c | 22 ++++++---- 6 files changed, 82 insertions(+), 130 deletions(-) diff --git a/includes/lem_in.h b/includes/lem_in.h index 8dba145..6898070 100644 --- a/includes/lem_in.h +++ b/includes/lem_in.h @@ -6,7 +6,7 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/23 17:31:19 by tmaze #+# #+# */ -/* Updated: 2019/04/10 14:18:13 by tmaze ### ########.fr */ +/* Updated: 2019/04/11 10:50:04 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ @@ -118,6 +118,7 @@ void lm_init_data(t_syntax *synt, t_holder *holder void lm_initdata(t_lmdata *data); int lm_getparams(t_lmdata *data); +void lm_clean_data(t_lmdata *data); t_ind **lst_indinit(t_lmdata *data); int lst_indadd_link(t_lmdata *data, int n1, int n2); @@ -135,7 +136,7 @@ void bfs(t_lmdata *data, t_bfs *tab, int start_ind , int end_ind); t_ind **edmunds_karp(t_lmdata *data, int start_ind , int end_ind); -void push_ants(t_lmdata *data, t_ind **paths +int push_ants(t_lmdata *data, t_ind **paths , int nb_paths); #endif diff --git a/srcs/lem_in.c b/srcs/lem_in.c index 15449e3..a04b3fd 100644 --- a/srcs/lem_in.c +++ b/srcs/lem_in.c @@ -6,7 +6,7 @@ /* By: mndhlovu +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/25 06:31:05 by mndhlovu #+# #+# */ -/* Updated: 2019/04/10 15:35:18 by tmaze ### ########.fr */ +/* Updated: 2019/04/11 10:50:40 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,8 +26,18 @@ static t_node *get_node_role(t_lmdata *data, char role) 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_lmdata *lmdata, t_ind ***ret) { if (!(lm_parser(synt, lmdata, holder))) return (0); @@ -35,6 +45,12 @@ static int lem_in(t_syntax *synt, t_holder *holder, return (0); if (!(lm_adj_parser(lmdata, holder))) return (0); + 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); } @@ -50,30 +66,14 @@ int main(int ac, char **av) t_lmdata ldata; t_holder holder; t_ind **ret; - int i; (void)av; - i = 0; if (ac == 1) { lm_init_data(&synt, &holder, &ldata); - if (!(lem_in(&synt, &holder, &ldata))) + if (!(lem_in(&synt, &holder, &ldata, &ret))) return (lm_error_exit()); - if ((ret = edmunds_karp(&ldata, get_node_role(&ldata, 's')->ind - , get_node_role(&ldata, 'e')->ind)) == NULL) - return (lm_error_exit()); - i = 0; - while (ret[i]) - i++; - push_ants(&ldata, ret, i); - tablst_inddel(ret); - i = 0; - while (i < ldata.nb_nodes) - { - lst_inddel(&(ldata.adj[i])); - i++; - } - ft_memdel((void**)&(ldata.adj)); + lm_clean_data(&ldata); return (0); } return (1); diff --git a/srcs/lm_data_utils.c b/srcs/lm_data_utils.c index f7101b0..9ccb673 100644 --- a/srcs/lm_data_utils.c +++ b/srcs/lm_data_utils.c @@ -6,15 +6,15 @@ /* By: mndhlovu +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/04/05 06:35:40 by mndhlovu #+# #+# */ -/* Updated: 2019/04/08 16:40:15 by tmaze ### ########.fr */ +/* Updated: 2019/04/11 11:32:32 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "lem_in.h" -t_rdata *lm_new_raw_line(char *raw) +t_rdata *lm_new_raw_line(char *raw) { - t_rdata *line; + t_rdata *line; if (!(line = (t_rdata *)malloc(sizeof(t_rdata)))) return (NULL); @@ -23,7 +23,7 @@ t_rdata *lm_new_raw_line(char *raw) return (line); } -void lm_append_line(t_rdata **line, char *raw) +void lm_append_line(t_rdata **line, char *raw) { if (*line) { @@ -33,7 +33,26 @@ void lm_append_line(t_rdata **line, char *raw) (*line)->next = lm_new_raw_line(raw); } else - { *line = lm_new_raw_line(raw); - } +} + +void lm_clean_data(t_lmdata *data) +{ + t_node *tmp; + int i; + + while (data->nodes_data) + { + tmp = data->nodes_data; + data->nodes_data = data->nodes_data->next; + ft_strdel(&(tmp->name)); + ft_memdel((void**)&tmp); + } + i = 0; + while (i < data->nb_nodes) + { + lst_inddel(&(data->adj[i])); + i++; + } + ft_memdel((void**)&(data->adj)); } diff --git a/srcs/lm_mem_utils.c b/srcs/lm_mem_utils.c index d84f116..371cfdc 100644 --- a/srcs/lm_mem_utils.c +++ b/srcs/lm_mem_utils.c @@ -6,17 +6,12 @@ /* By: mndhlovu +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/25 06:31:37 by mndhlovu #+# #+# */ -/* Updated: 2019/04/09 18:27:36 by tmaze ### ########.fr */ +/* Updated: 2019/04/11 11:39:06 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "lem_in.h" -// void lm_destroy_data(t_syntax *synt, t_holder *holder, t_lmdata *ldata) -// { -// // destroy and free memory -// } - void lm_init_data(t_syntax *synt, t_holder *holder, t_lmdata *ldata) { synt->nb_state = 0; @@ -62,20 +57,24 @@ int lm_add_vertex(t_lmdata *ldata, char *raw, char flag, char **tab; t_node *new; - if (!(new = (t_node *)malloc(sizeof(t_node)))) + 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)) { - new->name = tab[0]; + 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); } } @@ -102,7 +101,7 @@ int lm_ext_conn(t_holder *holder, t_lmdata *data, char *raw) t_temp *temp; t_temp *new; - if (!(new = (t_temp *)malloc(sizeof(t_temp)))) + if (!(new = (t_temp *)ft_memalloc(sizeof(t_temp)))) return (0); tab = ft_strsplit(raw, '-'); if (tab != NULL) @@ -120,6 +119,7 @@ int lm_ext_conn(t_holder *holder, t_lmdata *data, char *raw) temp->next = new; } (holder->count)++; + ft_del_words_tables(&tab); return (1); } return (0); diff --git a/srcs/lm_parser.c b/srcs/lm_parser.c index bd95c37..fd816cd 100644 --- a/srcs/lm_parser.c +++ b/srcs/lm_parser.c @@ -6,44 +6,12 @@ /* By: mndhlovu +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/25 06:30:51 by mndhlovu #+# #+# */ -/* Updated: 2019/04/08 15:44:55 by tmaze ### ########.fr */ +/* Updated: 2019/04/11 09:51:29 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "lem_in.h" -// void lm_locate_cmd(t_syntax *synt) -// { -// char *line; -// char *tmp; -// int index; - -// index = 0; -// while (ft_getline(&line) > 0) -// { -// tmp = ft_strchr(line, '#'); -// if ((!synt->s_cmd || !synt->e_cmd) && (tmp != NULL && line[1] == '#')) -// { -// if (!synt->s_cmd) -// { -// if (ft_strcmp(tmp, "##start") == 0) -// { -// synt->s_cmd = 1; -// } -// } -// if (!synt->e_cmd) -// { -// if (ft_strcmp(tmp, "##end") == 0) -// { -// synt->e_cmd = 1; -// synt->e_pos = index; -// } -// } -// } -// index++; -// } -// } - void lm_locate_cd(int index, t_syntax *synt, char *line) { char *tmp; @@ -70,57 +38,6 @@ void lm_locate_cd(int index, t_syntax *synt, char *line) } } -// void lm_locate_cmd(t_syntax *synt) -// { -// char *line; -// char *tmp; -// int index; - -// index = 0; -// while (ft_getline(&line) > 0) -// { -// tmp = ft_strchr(line, '#'); -// if ((!synt->s_cmd || !synt->e_cmd) && (tmp != NULL && line[1] == '#')) -// { -// if (!synt->s_cmd) -// { -// if (ft_strcmp(tmp, "##start") == 0) -// { -// synt->s_cmd = 1; -// } -// } -// if (!synt->e_cmd) -// { -// if (ft_strcmp(tmp, "##end") == 0) -// { -// synt->e_cmd = 1; -// synt->e_pos = index; -// } -// } -// } -// index++; -// } -// } - -// int lm_get_ant_num(t_lmdata *ldata, t_syntax *synt) -// { -// char *line; -// int value; - -// if (ft_getline(&line) > 0) -// { -// value = lm_get_value(line); -// if (value != -1) -// { -// ldata->nbants = value; -// synt->nb_state = 1; -// return (1); -// } -// free(line); -// } -// return (0); -// } - int lm_get_ant_(int counter, t_lmdata *ldata, t_syntax *synt, char *line) { int value; @@ -161,13 +78,22 @@ int lm_parser(t_syntax *synt, t_lmdata *ldata, index = 0; while (ft_getline(&raw) > 0) { + ft_printf("%s\n", raw); if (!(lm_get_ant_(index, ldata, synt, raw)) && index == 0) + { + ft_strdel(&raw); return (0); + } lm_locate_cd(index, synt, raw); if (!(lm_get_vertices(index, synt, ldata, holder, raw))) + { + ft_strdel(&raw); return (0); + } + ft_strdel(&raw); index++; } - free(raw); + ft_strdel(&raw); + ft_putchar('\n'); return (1); } diff --git a/srcs/push_ants.c b/srcs/push_ants.c index 2026e29..9860931 100644 --- a/srcs/push_ants.c +++ b/srcs/push_ants.c @@ -6,7 +6,7 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/04/06 11:37:56 by tmaze #+# #+# */ -/* Updated: 2019/04/10 14:53:01 by tmaze ### ########.fr */ +/* Updated: 2019/04/11 09:14:45 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ @@ -62,19 +62,24 @@ static void print_ants(t_lmdata *data, t_ants **ants, char *has_start clean_ants(ants); } -void push_ants(t_lmdata *data, t_ind **paths, int nb_paths) +static void init_ants(t_ants **ants, int *ant_c, char *has_start, int nb_paths) +{ + *ants = NULL; + ft_bzero(has_start, nb_paths); + *ant_c = 2; + has_start[0] = 1; +} + +int push_ants(t_lmdata *data, t_ind **paths, int nb_paths) { t_ants *ants; int i; int ant_c; char has_start[nb_paths]; - ants = NULL; - ft_bzero(has_start, nb_paths); + init_ants(&ants, &ant_c, has_start, nb_paths); if (add_ant(&ants, 1, 0, paths) == NULL) - return ; - ant_c = 2; - has_start[0] = 1; + return (0); while ((ants || ant_c <= data->nbants) && (i = -1)) { while (++i < nb_paths) @@ -83,10 +88,11 @@ void push_ants(t_lmdata *data, t_ind **paths, int nb_paths) if (!add_ant(&ants, ant_c, i, paths)) del_ants(&ants); if (!ants) - return ; + return (0); ant_c++; has_start[i] = 1; } print_ants(data, &ants, has_start, paths); } + return (1); }