int bitmap_removeblockofsize (int index, int size, struct Bitmap* bitmap) { int start; int count; start = index; count = 0; while (1==1) { // Handle wrap around case if (index == TOTAL_BLOCKS - 1) { index = 0; } bitmap_removeatindex(index, bitmap); if (count == size) { PRINT("Bitmap:: setblockofsize: Set block of size: %d at index: %d\n", size, start); bitmap->num_empty += size; return 0; } count ++; index ++; } return -1; }
int main() { struct Bitmap bitmap; bitmap_initialize(&bitmap); bitmap_setatindex(-1, &bitmap); bitmap_setatindex(7, &bitmap); bitmap_setatindex(7, &bitmap); bitmap_removeatindex(7, &bitmap); bitmap_setatindex(7, &bitmap); int block_size = 400; int index = bitmap_findemptyblockofsize(block_size, &bitmap); bitmap_setblockofsize(block_size, &bitmap); _bitmap_print_raw(&bitmap); bitmap_removeblockofsize(index, block_size, &bitmap); _bitmap_print_raw(&bitmap); return 0; }