Esempio n. 1
0
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;
}
Esempio n. 3
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;
}