提交 1acfc171 编写于 作者: O Osier Yang

util: Add a helper to check if all bits of a bitmap are clear

上级 d4bf0a93
......@@ -1046,6 +1046,7 @@ virBitmapEqual;
virBitmapFormat;
virBitmapFree;
virBitmapGetBit;
virBitmapIsAllClear;
virBitmapIsAllSet;
virBitmapNew;
virBitmapNewCopy;
......
......@@ -590,6 +590,23 @@ bool virBitmapIsAllSet(virBitmapPtr bitmap)
return true;
}
/**
* virBitmapIsAllClear:
* @bitmap: the bitmap to check
*
* check if all bits in @bitmap are clear
*/
bool virBitmapIsAllClear(virBitmapPtr bitmap)
{
int i;
for (i = 0; i < bitmap->map_len; i++)
if (bitmap->map[i] != 0)
return false;
return true;
}
/**
* virBitmapNextSetBit:
* @bitmap: the bitmap
......
......@@ -100,6 +100,9 @@ void virBitmapClearAll(virBitmapPtr bitmap)
bool virBitmapIsAllSet(virBitmapPtr bitmap)
ATTRIBUTE_NONNULL(1);
bool virBitmapIsAllClear(virBitmapPtr bitmap)
ATTRIBUTE_NONNULL(1);
ssize_t virBitmapNextSetBit(virBitmapPtr bitmap, ssize_t pos)
ATTRIBUTE_NONNULL(1);
......
......@@ -125,6 +125,8 @@ static int test2(const void *data ATTRIBUTE_UNUSED)
goto error;
virBitmapClearAll(bitmap);
if (!virBitmapIsAllClear(bitmap))
goto error;
if (testBit(bitmap, 0, size - 1, false) < 0)
goto error;
if (virBitmapCountBits(bitmap) != 0)
......@@ -154,6 +156,9 @@ static int test3(const void *data ATTRIBUTE_UNUSED)
if (!virBitmapIsAllSet(bitmap))
goto error;
virBitmapClearAll(bitmap);
if (!virBitmapIsAllClear(bitmap))
goto error;
ret = 0;
error:
......@@ -196,6 +201,9 @@ static int test4(const void *data ATTRIBUTE_UNUSED)
if (virBitmapNextClearBit(bitmap, i) != -1)
goto error;
if (!virBitmapIsAllClear(bitmap))
goto error;
virBitmapFree(bitmap);
bitmap = NULL;
......@@ -406,6 +414,10 @@ static int test7(const void *v ATTRIBUTE_UNUSED)
if (!virBitmapIsAllSet(bitmap))
goto error;
virBitmapClearAll(bitmap);
if (!virBitmapIsAllClear(bitmap))
goto error;
virBitmapFree(bitmap);
}
......@@ -416,6 +428,30 @@ error:
return -1;
}
static int test8(const void *v ATTRIBUTE_UNUSED)
{
virBitmapPtr bitmap = NULL;
char data[108] = {0x00,};
bitmap = virBitmapNewData(data, sizeof(data));
if (!bitmap)
goto error;
if (!virBitmapIsAllClear(bitmap))
goto error;
if (virBitmapSetBit(bitmap, 11) < 0)
goto error;
if (virBitmapIsAllClear(bitmap))
goto error;
return 0;
error:
virBitmapFree(bitmap);
return -1;
}
static int
mymain(void)
{
......@@ -435,7 +471,8 @@ mymain(void)
ret = -1;
if (virtTestRun("test7", 1, test7, NULL) < 0)
ret = -1;
if (virtTestRun("test8", 1, test8, NULL) < 0)
ret = -1;
return ret;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册