#include #include #include #define N (256) #define M (255) struct boolist { int data[8][256]; } list = {}; void add(int e) { printf("insert(e = %i);\n", e); assert(!list.data[0][e]); for (int k = 0; k < 8 && !list.data[k][e >> k]++; k++); } void discard(int e) { printf("discard(e = %i);\n", e); assert(list.data[0][e]); for (int k = 0; k < 8 && !--list.data[k][e >> k]; k++); } void print() { puts("print():"); void walk(int k, int i) { if (k >= 0) { int* a = &list.data[k][i >> k]; if (a[0]) walk(k - 1, i); if (a[1]) walk(k - 1, i + (1 << k)); } else { printf(" " "%i\n", i); } } walk(7, 0); } int main() { print(); add(42); print(); add(101); print(); discard(42); print(); add(34); print(); add(35); print(); add(36); print(); discard(35); print(); return 0; }