diff -r feef7736a439 -r 9745a231f8d7 types.c --- a/types.c Fri Feb 15 15:08:38 2008 -0500 +++ b/types.c Mon Mar 10 11:30:00 2008 -0400 @@ -244,3 +244,28 @@ return hashtable_insert(table, string); } + + +void +bitarray_init(struct bitarray *bitarray, int size, int initial_value) +{ + int bytes = ((size + 31) / 32) * 4; + + bitarray->bits = malloc(bytes); + memset(bitarray->bits, initial_value ? 0xff : 0x00, bytes); +} + +void +bitarray_set(struct bitarray *bitarray, int bit, int value) +{ + if (value) + bitarray->bits[bit >> 5] |= 1 << (bit & 31); + else + bitarray->bits[bit >> 5] &= ~(1 << (bit & 31)); +} + +int +bitarray_get(struct bitarray *bitarray, int bit) +{ + return (bitarray->bits[bit >> 5] & (1 << (bit & 31))) != 0; +}