19 static_assert(
sizeof(
bUUID) == 16,
"expect UUIDs to be 128 bit exactly");
23 static std::mt19937_64 rng = []() {
37 clock_gettime(CLOCK_REALTIME, &ts);
39 timespec_get(&ts, TIME_UTC);
56 uuid_as_int64[0] = rng();
57 uuid_as_int64[1] = rng();
72 const bUUID nil = {0, 0, 0, 0, 0, {0}};
83 return std::memcmp(&uuid1, &uuid2,
sizeof(uuid1)) == 0;
89 "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
105 const int fields_parsed_num = std::sscanf(
107 "%8x-%4hx-%4hx-%2hhx%2hhx-%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx",
119 return fields_parsed_num == 11;
124 std::string
buffer(36,
'\0');
132 bUUID::bUUID(
const std::initializer_list<uint32_t> field_values)
134 BLI_assert_msg(field_values.size() == 11,
"bUUID requires 5 regular fields + 6 `node` values");
136 const auto *field_iter = field_values.begin();
138 this->time_low = *field_iter++;
139 this->time_mid =
static_cast<uint16_t>(*field_iter++);
140 this->time_hi_and_version =
static_cast<uint16_t>(*field_iter++);
141 this->clock_seq_hi_and_reserved =
static_cast<uint8_t>(*field_iter++);
142 this->clock_seq_low =
static_cast<uint8_t>(*field_iter++);
144 std::copy(field_iter, field_values.end(), this->node);
151 std::stringstream ss;
152 ss <<
"invalid UUID string " << string_formatted_uuid;
153 throw std::runtime_error(ss.str());
159 *(
static_cast<::
bUUID *
>(
this)) = struct_uuid;
166 return uuid_as_int64[0] ^ uuid_as_int64[1];
176 return !(uuid1 == uuid2);
181 auto simple_fields1 = std::tie(uuid1.
time_low,
186 auto simple_fields2 = std::tie(uuid2.
time_low,
191 if (simple_fields1 == simple_fields2) {
192 return std::memcmp(uuid1.
node, uuid2.
node,
sizeof(uuid1.
node)) < 0;
194 return simple_fields1 < simple_fields2;
#define BLI_assert_msg(a, msg)
struct bUUID bUUID
Universally Unique Identifier according to RFC4122.
static unsigned long seed
ccl_global float * buffer
constexpr bool operator!=(StringRef a, StringRef b)
constexpr bool operator==(StringRef a, StringRef b)
constexpr bool operator<(StringRef a, StringRef b)
static void copy(bNodeTree *dest_ntree, bNode *dest_node, const bNode *src_node)
unsigned __int64 uint64_t
Universally Unique Identifier according to RFC4122.
uint8_t clock_seq_hi_and_reserved
uint16_t time_hi_and_version
void BLI_uuid_format(char *buffer, const bUUID uuid)
bool BLI_uuid_equal(const bUUID uuid1, const bUUID uuid2)
bool BLI_uuid_parse_string(bUUID *uuid, const char *buffer)
bool BLI_uuid_is_nil(bUUID uuid)
bUUID BLI_uuid_generate_random()
std::ostream & operator<<(std::ostream &stream, bUUID uuid)