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

97 lines
1.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 insert(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 delete(int e)
{
printf("delete(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();
insert(42);
print();
insert(101);
print();
delete(42);
print();
insert(34);
print();
insert(35);
print();
insert(36);
print();
delete(35);
print();
return 0;
}