aboutsummaryrefslogtreecommitdiffstats
path: root/src/ft_get_map.c
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-01-29 23:21:16 +0100
committerJozanLeClerc <bousset.rudy@gmail.com>2020-01-29 23:21:16 +0100
commit3fe40e249fbad468347b2a0d643b19f1f5f3f524 (patch)
treef696e53265307a1b15b36c2d72bb6dfbd95a8885 /src/ft_get_map.c
parentit's wonderful (diff)
download42-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.c109
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);
}