int bitmap_get_one_block(struct Bitmap* bitmap) { int index; if (bitmap->num_empty == 0) { PRINT("Bitmap:: setblockofsize: no more empty blocks\n"); return -1; } index = bitmap_findemptyblockofsize(1, bitmap); bitmap_setatindex(index, bitmap); bitmap->num_empty --; return index; }
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; }
int bitmap_setblockofsize(int size, struct Bitmap* bitmap) { int index; int start; int count; if (bitmap->num_empty == 0) { PRINT("Bitmap:: setblockofsize: no more empty blocks\n"); return -1; } index = bitmap_findemptyblockofsize(size, bitmap); start = index; count = 0; while (1==1) { // Handle wrap around case if (index == TOTAL_BLOCKS - 1) { index = 0; } bitmap_setatindex(index, bitmap); if (count == size) { PRINT("Bitmap:: setblockofsize: Set block of size: %d at index: %d\n", size, start); bitmap->num_empty += size; return index; } count ++; index ++; } return -1; }