UUID: place C++ code in correct namespace
Put the `bUUID` class in the `blender` namespace, instead of the `blender::bke` namespace. As a result, some C++ code now correctly uses the C++ class, where previously it would use the C struct and use implicit casting where necessary. As a result, support for initializer lists had to be explicitly coded and in another place an explicit `::bUUID` was necessary to avoid ambiguity.
This commit is contained in:
@@ -126,7 +126,7 @@ void BKE_asset_metadata_catalog_id_clear(struct AssetMetaData *asset_data)
|
||||
}
|
||||
|
||||
void BKE_asset_metadata_catalog_id_set(struct AssetMetaData *asset_data,
|
||||
const bUUID catalog_id,
|
||||
const ::bUUID catalog_id,
|
||||
const char *catalog_simple_name)
|
||||
{
|
||||
asset_data->catalog_id = catalog_id;
|
||||
|
@@ -68,19 +68,24 @@ bool BLI_uuid_parse_string(bUUID *uuid, const char *buffer) ATTR_NONNULL();
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
# include <initializer_list>
|
||||
# include <ostream>
|
||||
|
||||
/** Output the UUID as formatted ASCII string, see #BLI_uuid_format(). */
|
||||
std::ostream &operator<<(std::ostream &stream, bUUID uuid);
|
||||
|
||||
namespace blender::bke {
|
||||
namespace blender {
|
||||
|
||||
class bUUID : public ::bUUID {
|
||||
public:
|
||||
bUUID() = default;
|
||||
|
||||
/** Initialise from the bUUID DNA struct. */
|
||||
bUUID(const ::bUUID &struct_uuid);
|
||||
|
||||
/** Initialise from 11 integers, 5 for the regular fields and 6 for the `node` array. */
|
||||
bUUID(std::initializer_list<uint> field_values);
|
||||
|
||||
/** Initialise by parsing the string; undefined behaviour when the string is invalid. */
|
||||
explicit bUUID(const std::string &string_formatted_uuid);
|
||||
|
||||
@@ -89,6 +94,6 @@ class bUUID : public ::bUUID {
|
||||
|
||||
bool operator==(bUUID uuid1, bUUID uuid2);
|
||||
|
||||
} // namespace blender::bke
|
||||
} // namespace blender
|
||||
|
||||
#endif
|
||||
|
@@ -18,6 +18,7 @@
|
||||
* \ingroup bli
|
||||
*/
|
||||
|
||||
#include "BLI_assert.h"
|
||||
#include "BLI_uuid.h"
|
||||
|
||||
#include <cstdio>
|
||||
@@ -139,7 +140,22 @@ std::ostream &operator<<(std::ostream &stream, bUUID uuid)
|
||||
return stream;
|
||||
}
|
||||
|
||||
namespace blender::bke {
|
||||
namespace blender {
|
||||
|
||||
bUUID::bUUID(const std::initializer_list<uint> field_values)
|
||||
{
|
||||
BLI_assert_msg(field_values.size() == 11, "bUUID requires 5 regular fields + 6 `node` values");
|
||||
|
||||
auto field_iter = field_values.begin();
|
||||
|
||||
this->time_low = static_cast<uint32_t>(*field_iter++);
|
||||
this->time_mid = static_cast<uint16_t>(*field_iter++);
|
||||
this->time_hi_and_version = static_cast<uint16_t>(*field_iter++);
|
||||
this->clock_seq_hi_and_reserved = static_cast<uint8_t>(*field_iter++);
|
||||
this->clock_seq_low = static_cast<uint8_t>(*field_iter++);
|
||||
|
||||
std::copy(field_iter, field_values.end(), this->node);
|
||||
}
|
||||
|
||||
bUUID::bUUID(const std::string &string_formatted_uuid)
|
||||
{
|
||||
@@ -163,9 +179,9 @@ uint64_t bUUID::hash() const
|
||||
return uuid_as_int64[0] ^ uuid_as_int64[1];
|
||||
}
|
||||
|
||||
bool operator==(bUUID uuid1, bUUID uuid2)
|
||||
bool operator==(const bUUID uuid1, const bUUID uuid2)
|
||||
{
|
||||
return BLI_uuid_equal(uuid1, uuid2);
|
||||
}
|
||||
|
||||
} // namespace blender::bke
|
||||
} // namespace blender
|
||||
|
@@ -18,6 +18,8 @@
|
||||
|
||||
#include "BLI_uuid.h"
|
||||
|
||||
namespace blender::tests {
|
||||
|
||||
TEST(BLI_uuid, generate_random)
|
||||
{
|
||||
const bUUID uuid = BLI_uuid_generate_random();
|
||||
@@ -51,7 +53,7 @@ TEST(BLI_uuid, generate_many_random)
|
||||
TEST(BLI_uuid, nil_value)
|
||||
{
|
||||
const bUUID nil_uuid = BLI_uuid_nil();
|
||||
const bUUID zeroes_uuid = {0, 0, 0, 0, 0, 0};
|
||||
const bUUID zeroes_uuid{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
EXPECT_TRUE(BLI_uuid_equal(nil_uuid, zeroes_uuid));
|
||||
EXPECT_TRUE(BLI_uuid_is_nil(nil_uuid));
|
||||
@@ -91,13 +93,13 @@ TEST(BLI_uuid, string_formatting)
|
||||
EXPECT_EQ("00000001-0002-0003-0405-060000000007", buffer);
|
||||
|
||||
/* Somewhat more complex bit patterns. This is a version 1 UUID generated from Python. */
|
||||
const bUUID uuid1 = {3540651616, 5282, 4588, 139, 153, {0xf7, 0x73, 0x69, 0x44, 0xdb, 0x8b}};
|
||||
const bUUID uuid1 = {3540651616, 5282, 4588, 139, 153, 0xf7, 0x73, 0x69, 0x44, 0xdb, 0x8b};
|
||||
BLI_uuid_format(buffer.data(), uuid1);
|
||||
EXPECT_EQ("d30a0e60-14a2-11ec-8b99-f7736944db8b", buffer);
|
||||
|
||||
/* Namespace UUID, example listed in RFC4211. */
|
||||
const bUUID namespace_dns = {
|
||||
0x6ba7b810, 0x9dad, 0x11d1, 0x80, 0xb4, {0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8}};
|
||||
0x6ba7b810, 0x9dad, 0x11d1, 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8};
|
||||
BLI_uuid_format(buffer.data(), namespace_dns);
|
||||
EXPECT_EQ("6ba7b810-9dad-11d1-80b4-00c04fd430c8", buffer);
|
||||
}
|
||||
@@ -139,7 +141,9 @@ TEST(BLI_uuid, string_parsing_fail)
|
||||
TEST(BLI_uuid, stream_operator)
|
||||
{
|
||||
std::stringstream ss;
|
||||
const bUUID uuid = {3540651616, 5282, 4588, 139, 153, {0xf7, 0x73, 0x69, 0x44, 0xdb, 0x8b}};
|
||||
const bUUID uuid = {3540651616, 5282, 4588, 139, 153, 0xf7, 0x73, 0x69, 0x44, 0xdb, 0x8b};
|
||||
ss << uuid;
|
||||
EXPECT_EQ(ss.str(), "d30a0e60-14a2-11ec-8b99-f7736944db8b");
|
||||
}
|
||||
|
||||
} // namespace blender::tests
|
||||
|
Reference in New Issue
Block a user