diff options
author | JozanLeClerc <bousset.rudy@gmail.com> | 2020-01-29 23:21:16 +0100 |
---|---|---|
committer | JozanLeClerc <bousset.rudy@gmail.com> | 2020-01-29 23:21:16 +0100 |
commit | 3fe40e249fbad468347b2a0d643b19f1f5f3f524 (patch) | |
tree | f696e53265307a1b15b36c2d72bb6dfbd95a8885 /src/ft_get_map.c | |
parent | it's wonderful (diff) | |
download | 42-cub3d-3fe40e249fbad468347b2a0d643b19f1f5f3f524.tar.gz 42-cub3d-3fe40e249fbad468347b2a0d643b19f1f5f3f524.tar.bz2 42-cub3d-3fe40e249fbad468347b2a0d643b19f1f5f3f524.tar.xz 42-cub3d-3fe40e249fbad468347b2a0d643b19f1f5f3f524.tar.zst 42-cub3d-3fe40e249fbad468347b2a0d643b19f1f5f3f524.zip |
I've seen enough
Diffstat (limited to '')
-rw-r--r-- | src/ft_get_map.c | 109 |
1 files changed, 45 insertions, 64 deletions
diff --git a/src/ft_get_map.c b/src/ft_get_map.c index ff16df1..12ab7f7 100644 --- a/src/ft_get_map.c +++ b/src/ft_get_map.c @@ -1,110 +1,91 @@ #include <libft.h> #include <cub3d.h> #include <stddef.h> -#include <stdlib.h> +#include <stdint.h> -static int +static void ft_linecpy(char *line, char *mapl, size_t start) { size_t i; size_t j; + size_t slen; i = 0; j = start; - while (i < ft_strlen(line) && line[i]) + slen = ft_strlen(line); + while (i < slen && line[i]) { + while (line[i] == ' ') + i++; mapl[j] = line[i]; - i += 2; + i++; j++; } mapl[j] = '\n'; - return (0); } -static int -ft_check_err(char *line, size_t size) +static int8_t +ft_cat_mapl(char *line, size_t i, t_cub *clist) { - size_t i; - - i = 1; - if (ft_strlen(line) != size || line[0] != '1' - || line[ft_strlen(line) - 1] != '1') + if (!(clist->mapl = (char *)ft_nrealloc(clist->mapl, + ((clist->map_w + 1) * i) * sizeof(char), + ((clist->map_w + 1) * (i + 1)) * sizeof(char)))) return (-1); - while (i < ft_strlen(line) && line[i]) - { - if (line[i] != ' ') - return (-1); - i += 2; - } + ft_linecpy(line, clist->mapl, (clist->map_w + 1) * i); return (0); } -static char -*ft_get_first_line(char *line, t_cub *clist) +int +ft_get_map_first_line(char *line, t_cub *clist) { - size_t i; - char *mapl; - - i = 0; - while (i < ft_strlen(line) && line[i]) + if (!line[0]) { - if (line[i] != '1' && line[i] != '\0') - return (NULL); - i += 2; + ft_memdel(line); + return (-1); } - clist->map_w = ft_strlen(line); - if (clist->map_w <= 2 || ft_check_err(line, clist->map_w) < 0) - return (NULL); - if (!(mapl = (char*)malloc(((clist->map_w / 2) + 2) * sizeof(char)))) - return (NULL); - ft_linecpy(line, mapl, 0); - ft_memdel(line); - return (mapl); -} - -static char -*ft_get_core_map(char *line, char *mapl, size_t i, t_cub *clist) -{ - if (ft_check_err(line, clist->map_w) < 0) + clist->map_w = ft_get_line_len(line); + if (ft_check_map_line(line, 1, clist) < 0) + { + ft_memdel(line); + return (-1); + } + clist->mapl = NULL; + if (ft_cat_mapl(line, 0, clist) < 0) { ft_memdel(line); - ft_memdel(mapl); - return (NULL); + return (-1); } - if (!(mapl = (char*)ft_nrealloc(mapl, (((clist->map_w / 2) + 2) * i) - * sizeof(char), ((((clist->map_w / 2) + 2) * i) + - (clist->map_w / 2) + 2) * sizeof(char)))) - return (NULL); - ft_linecpy(line, mapl, ((clist->map_w / 2) + 2) * i); ft_memdel(line); - return (mapl); + return (1); } int -ft_get_map(int fd, t_cub *clist) +ft_get_map_core(int fd, t_cub *clist) { - size_t i; int ret; + size_t i; char *line; - char *mapl; - if ((ret = get_next_line(fd, &line)) <= 0 || - !(mapl = ft_get_first_line(line, clist))) - { - ft_memdel(line); - return (-1); - } i = 1; + ret = 1; while (ret > 0) { + clist->line_chk += 1; ret = get_next_line(fd, &line); - if (!(mapl = ft_get_core_map(line, mapl, i, clist))) + if (ret < 0) + return (-1); + if (!line[0] || ft_check_map_line(line, 0, clist) < 0 + || ft_cat_mapl(line, i, clist) < 0) + { + ft_memdel(line); return (-1); + } + ft_memdel(line); i++; } - mapl[(i * ((clist->map_w / 2) + 2)) - 1] = '\0'; - ft_free_words(clist->map, NULL); - clist->map = ft_split(mapl, '\n'); - ft_memdel(mapl); + clist->mapl[((clist->map_w + 1) * i) - 1] = '\0'; + ft_free_words(clist->map); + clist->map = ft_split(clist->mapl, '\n'); + ft_memdel(clist->mapl); return (0); } |