4-variable-simplifier/spikes/boolean-array.c

97 lines
1 KiB
C

#include <stdbool.h>
#include <assert.h>
#include <stdio.h>
#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;
}