RavEngine
Loading...
Searching...
No Matches
Uuid.hpp
1#pragma once
2#include <array>
3#include <string>
4
5namespace RavEngine {
6 namespace uuids {
7 struct uuid {
8 constexpr static uint8_t nbytes = 16;
9
10 // default uuids start with all 0s
11 uuid() {}
12
13 // construct from data ptr
14 uuid(const uint8_t* other_data) {
15 std::memcpy(data.data(), other_data, sizeof(data));
16 }
17
18 // uint8_t alias constructor for char*
19 uuid(const char* other_data) : uuid(reinterpret_cast<const uint8_t*>(other_data)) {}
20
21 static uuid create();
22
23 inline auto raw() const{
24 return data.data();
25 }
26
27 std::string to_string() const;
28
29 inline constexpr static size_t size() {
30 return nbytes;
31 }
32
33 inline bool operator==(const uuid& other) const{
34 for (uint8_t i = 0; i < nbytes; i++) {
35 if (data[i] != other.data[i]) {
36 return false;
37 }
38 }
39 return true;
40 }
41
42 std::array<uint8_t, nbytes> data{0};
43 };
44 }
45}
46
47namespace std {
48 template<>
49 struct hash<RavEngine::uuids::uuid> {
50 inline size_t operator()(const RavEngine::uuids::uuid& id) const {
51 uint64_t high = *reinterpret_cast<const uint64_t*>(id.data.data());
52 uint64_t low = *(reinterpret_cast<const uint64_t*>(id.data.data())+1);
53 return high ^ low;
54 }
55 };
56}
Definition concurrentqueue.h:747
Definition Animation.hpp:6
Definition Uuid.hpp:7