BitVector *BitVector_Create(int size, void * (* allocator_func)(size_t), void (*free_func)(void *), BitVector_Flags flags){ BitVector *ret = NULL; int init_val; //initialize bits to either 0 or 1 if(flags & BV_INIT_FILL){ init_val = SCHAR_MAX; }else{ init_val = 0; } if (allocator_func) { ret= allocator_func(sizeof(BitVector)); assert(ret!= NULL); } else { ret= malloc(sizeof(BitVector)); assert(ret!= NULL); } memset(ret, 0, sizeof(BitVector)); ret->size = size; ret->numBytes = ceil(size/ (double)CHAR_BIT ); ret->allocator_func = (allocator_func ? allocator_func : malloc); ret->deallocator_func = (free_func ? free_func : free); ret->bits = (char*) ret->allocator_func(ret->numBytes); //initialize bits to either 0 or 1 memset(ret->bits, init_val, ret->numBytes); return ret; }