diff --git a/.test_big_map.c.swp b/.test_big_map.c.swp new file mode 100644 index 0000000..ac425e4 Binary files /dev/null and b/.test_big_map.c.swp differ diff --git a/add_to_list.c b/add_to_list.c index 55dfe25..51c38dc 100644 --- a/add_to_list.c +++ b/add_to_list.c @@ -6,7 +6,7 @@ /* By: hulamy +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/04/14 15:20:53 by hulamy #+# #+# */ -/* Updated: 2019/04/19 23:02:00 by hulamy ### ########.fr */ +/* Updated: 2019/04/21 13:42:46 by hulamy ### ########.fr */ /* */ /* ************************************************************************** */ @@ -80,9 +80,51 @@ int add_to_list(char *line, t_fillist **list) return (1); } +void print_test(int octet) +{ + unsigned int i; + + i = 1 << 31; + while (i) + { + (octet & i) ? printf("1") : printf("0"); + i >>= 1; + } +} + +void test(unsigned int map[]) +{ + int i; + int j; + int k; + int l; + unsigned int mask; + + mask = map[9]; + + i = -1; + j = 9; + while (j >= 0) + { + if (!(++i % 32) && j-- && (k = -1)) + { + while (++k < 10) + print_test(map[k]); + printf("\n"); + } + l = 0; + while (l++ < 320 - 32 - i) + printf(" "); + print_test(mask); + printf("\n"); + mask = (mask >> 1) | (((1 << (i % 32)) & map[j]) << (31 - (i % 32))); + } +} + int main(int ac, char **av) { static t_fillist *list = NULL; // avant d'appeller add_to_list il faut declarer un pointeur static vers la structure + unsigned int map[10] = {1568713153, 817645681, 654186132, 538171355, 1718453135, 551286515, 1631843343, 3413834313, 1155555555, 999999999}; int i; if (ac > 1) @@ -96,6 +138,7 @@ int main(int ac, char **av) list = list->next; } } + test(map); return (0); } diff --git a/test_big_map.c b/test_big_map.c index 8e15877..1e3d96f 100644 --- a/test_big_map.c +++ b/test_big_map.c @@ -12,6 +12,18 @@ void print_bits(int octet) } } +void print_short(short octet) +{ + unsigned int i; + + i = 1 << 15; + while (i) + { + (octet & i) ? printf("1") : printf("0"); + i >>= 1; + } +} + /* ** cette fonction affiche un mask qui se decale le long d'un tableau d'int ** lancer avec gcc test_big_map.c puis ./a.out pour voir @@ -24,32 +36,52 @@ void test(unsigned int map[]) int k; int l; unsigned int mask; + short tetri; + tetri = (1 << 4) | (1 << 5) | (1 << 6); mask = map[9]; - - i = -1; + i = 0; j = 9; - while (j >= 0) + while ((9 - (i / 32)) > 0) { - if (!(++i % 32) && j-- && (k = -1)) + // a chaque fois que mask s'est decale jusqu'au int precedant du tableau, le if suivant reaffiche le tableau en une ligne + if (!(i % 32) && (10 - (i / 32)) && (k = -1)) { while (++k < 10) print_bits(map[k]); printf("\n"); } + // imprime le bon nombre d'espaces pour que le mask s'imprime pile sous le tableau d'int a la position ou il en est l = 0; while (l++ < 320 - 32 - i) printf(" "); + // imprime le mask print_bits(mask); printf("\n"); - mask = (mask >> 1) | (((1 << (i % 32)) & map[j]) << (31 - (i % 32))); + // compare le mask (int) avec le short et l'imprime s'ils sont compatibles + if (!(tetri & mask)) + { + l = 0; + printf(">>>>>"); + while (l++ < 320 - 32 + 16 - i - 5) + printf(" "); + print_short(tetri); + printf("\n"); + } + // fait tourner le mask le long du tableau d'int + // (mask >> 1) decale le mask vers la droite (perd le bit le plus a droite et insere un bit a gauche) + // (1 << (i % 32)) creer un mask avec un 1 a la premiere place a droite, puis a la deuxieme, puis la troisieme, etc.. jusqu'a 32, et recommence + // (0000000000000010000000 & map[j]) recupere la valeur du bit de map[j] (qui est la map precedante sur le tableau d'int) a la position du 1 + // (0000000000000010000000 << (31 - (i % 32))) = 100000000000000000000 + // (mask >> 1) | 1000000000000000000000 = insere le 32eme bit dans mask + mask = (mask >> 1) | (((1 << (i % 32)) & map[(8 - (i / 32))]) << (31 - (i % 32))); + i++; } } int main() { unsigned int map[10] = {1568713153, 817645681, 654186132, 538171355, 1718453135, 551286515, 1631843343, 3413834313, 1155555555, 999999999}; - int i = 0; test(map); return (0);