void bit_convert(char *buf, t_tetri *tetris) { int tab[3]; int power; I = -1; J = -1; tetris->tetris = (t_tetris2*)malloc(sizeof(t_tetris2) * tetris->nb_tetris); while (buf[++I]) { K = 0; ft_init_tab(TET[++J].tetris, 16); TET[J].carac = 'A' + J; while ((buf[I] != '\n' && buf[I + 1] != '\n') && buf[I--]) { power = 0; while (buf[++I] != '\n') { if (buf[I] == '#') TET[J].tetris[K] += ft_power(2, power); power++; } K++; I++; } bit_reset(TET[J].tetris, 4); } }
BitVec *EratosthenesSieve(int n) { BitVec *b = BitVecNew(n); for (int i = 0; i < n; i++) { bit_set(b, i); } bit_reset(b, 0); bit_reset(b, 1); for (int i = 2; i < n; i++) { if (bit_get(b, i)) { for (int j = i * 2; j < n; j += i) bit_reset(b, j); } } return b; }
int test_base_bitset(const char* param) { rand_seed((uint32_t)time(NULL)); // bit create int size = param ? atoi(param) : rand() % 1024; bit_t* bit = bit_create(size); if (!bit) { fprintf(stderr, "bit create fail\n"); return -1; } // bit set int test_size = (size >> 1); for (int i = 0; i < test_size; ++ i) { bit_set(bit, i); } // bit is set for (int i = 0; i < size; ++ i) { if (i < test_size && bit_isset(bit, i)) { fprintf(stderr, "bit-set error\n"); bit_release(bit); return -1; } if (i >= test_size && bit_isset(bit, i) == 0) { fprintf(stderr, "bit-set error\n"); bit_release(bit); return -1; } } // bit count if (bit_count(bit) != test_size) { fprintf(stderr, "bit-count = %d error\n", bit_count(bit)); bit_release(bit); return -1; } // bit reset -> bit count for (int i = 0; i < test_size; ++ i) { bit_reset(bit, i); } if (bit_count(bit) != 0) { fprintf(stderr, "bit-count error\n"); bit_release(bit); return -1; } bit_release(bit); return 0; }