UUID: add nil value for UUIDs

Add `BLI_uuid_nil()` that returns the nil UUID (used to indicate "not
set") and `BLI_uuid_is_nil(uuid)` to do an equality test with the nil
value.
This commit is contained in:
2021-09-20 12:15:37 +02:00
parent 07b482c2ff
commit 029d042e85
3 changed files with 32 additions and 0 deletions

View File

@@ -37,6 +37,14 @@ extern "C" {
* This function is not thread-safe. */
UUID BLI_uuid_generate_random(void);
/**
* Return the UUID nil value, consisting of all-zero fields.
*/
UUID BLI_uuid_nil(void);
/** Return true iff this is the nil UUID. */
bool BLI_uuid_is_nil(UUID uuid);
/** Compare two UUIDs, return true if they are equal. */
bool BLI_uuid_equal(UUID uuid1, UUID uuid2);

View File

@@ -78,6 +78,17 @@ UUID BLI_uuid_generate_random()
return uuid;
}
UUID BLI_uuid_nil(void)
{
const UUID nil = {0, 0, 0, 0, 0, 0};
return nil;
}
bool BLI_uuid_is_nil(UUID uuid)
{
return BLI_uuid_equal(BLI_uuid_nil(), uuid);
}
bool BLI_uuid_equal(const UUID uuid1, const UUID uuid2)
{
return std::memcmp(&uuid1, &uuid2, sizeof(uuid1)) == 0;

View File

@@ -48,6 +48,19 @@ TEST(BLI_uuid, generate_many_random)
}
}
TEST(BLI_uuid, nil_value)
{
const UUID nil_uuid = BLI_uuid_nil();
const UUID zeroes_uuid = {0, 0, 0, 0, 0, 0};
EXPECT_TRUE(BLI_uuid_equal(nil_uuid, zeroes_uuid));
EXPECT_TRUE(BLI_uuid_is_nil(nil_uuid));
std::string buffer(36, '\0');
BLI_uuid_format(buffer.data(), nil_uuid);
EXPECT_EQ("00000000-0000-0000-0000-000000000000", buffer);
}
TEST(BLI_uuid, equality)
{
const UUID uuid1 = BLI_uuid_generate_random();