/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_sort_s_t.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: rbousset +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/24 20:22:45 by rbousset #+# #+# */ /* Updated: 2020/03/09 18:56:01 by rbousset ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include #include #include #include float **ft_alloc_dist_tab(void) { uint16_t i; float **dist_tab; if (!(dist_tab = (float **)ft_calloc((FT_TOTAL_SPRT + 1), sizeof(float*)))) return (NULL); i = 0; while (i < FT_TOTAL_SPRT + 1) { if (!(dist_tab[i] = (float *)ft_calloc(4096, sizeof(float)))) return (NULL); i++; } return (dist_tab); } static int8_t ft_set_current_sprite(t_cub *cl, int8_t j) { const int8_t st_o = cl->mlist.st_o[j]; if (st_o == 0) return (4); else if (st_o >= 1 && st_o <= 7) return (st_o + 7); else if (st_o == 8) return (15); else if (st_o == 9) return (17); else if (st_o >= 10) return (st_o + 8); return (0); } static void ft_alloc_and_fill_big_t(float **dist_tab, t_cub *cl) { int32_t i; int32_t j; int32_t k; if (!(cl->big_t = (float**)malloc(cl->big_t_val * sizeof(float*)))) ft_alloc_error(cl); i = -1; while (++i < cl->big_t_val) if (!(cl->big_t[i] = (float*)malloc(4 * sizeof(float)))) ft_alloc_error(cl); i = 0; j = 0; k = 0; ft_printf("%d %d %d %d %d %d %d %d\n", (int32_t)dist_tab[8][0], (int32_t)dist_tab[8][1], (int32_t)dist_tab[8][2], (int32_t)dist_tab[8][3], (int32_t)dist_tab[8][4], (int32_t)dist_tab[8][5], (int32_t)dist_tab[8][6], (int32_t)dist_tab[8][7]); while (i < cl->big_t_val) { if (dist_tab[j][k]) { cl->big_t[i][0] = dist_tab[j][k]; cl->big_t[i][1] = (float)ft_set_current_sprite(cl, j); cl->big_t[i][2] = (float)j; cl->big_t[i][3] = (float)k; k++; } else { k = 0; j++; } i++; } } static void ft_init_st(t_cub *cl, int32_t *st_o, float **dist_tab) { int8_t i; int8_t j; j = -1; i = -1; (void)dist_tab; while (++i < FT_TOTAL_SPRT) st_o[i] = -1; i = -1; while (++i < FT_TOTAL_SPRT) { if (cl->mlist.sprite_nbr[i] > 0) { st_o[++j] = i; /* ft_memcpy(dist_tab[j], dist_tab[i], 4096 * sizeof(float)); */ } } } void ft_sort_s_t(t_cub *cl, float **dist_tab) { int32_t i; ft_init_st(cl, cl->mlist.st_o, dist_tab); i = -1; while (++i < cl->big_t_val) ft_memdel((void*)&cl->big_t[i]); ft_memdel((void*)&cl->big_t); i = -1; cl->big_t_val = 0; while (++i < FT_TOTAL_SPRT) cl->big_t_val += cl->mlist.sprite_nbr[i]; ft_alloc_and_fill_big_t(dist_tab, cl); i = -1; while (++i < FT_TOTAL_SPRT + 1) ft_memdel((void*)&dist_tab[i]); ft_memdel((void*)&dist_tab); }