/* +++Date last modified: 05-Jul-1997 */ /* ** Functions to maintain an arbitrary length array of bits */ #include "bitcount-bitops.h" char *alloc_bit_array(size_t bits) { char *set = calloc((bits + CHAR_BIT - 1) / CHAR_BIT, sizeof(char)); return set; } int getbit(char *set, int number) { set += number / CHAR_BIT; return (*set & (1 << (number % CHAR_BIT))) != 0; /* 0 or 1 */ } void setbit(char *set, int number, int value) { set += number / CHAR_BIT; if (value) *set |= 1 << (number % CHAR_BIT); /* set bit */ else *set &= ~(1 << (number % CHAR_BIT)); /* clear bit*/ } void flipbit(char *set, int number) { set += number / CHAR_BIT; *set ^= 1 << (number % CHAR_BIT); /* flip bit */ }