CppCommon 1.0.6.0
C++ Common Library
Loading...
Searching...
No Matches
uuid.h
Go to the documentation of this file.
1
8
9#ifndef CPPCOMMON_SYSTEM_UUID_H
10#define CPPCOMMON_SYSTEM_UUID_H
11
12#include "errors/exceptions.h"
13
14#include <array>
15#include <string>
16
17namespace CppCommon {
18
20
36class UUID
37{
38public:
40 constexpr UUID() : _data() { _data.fill(0); }
42
45 template<size_t N>
46 explicit constexpr UUID(const char(&uuid)[N]) : UUID(uuid, N) {}
48
52 explicit constexpr UUID(const char* uuid, size_t size);
54
57 explicit UUID(const std::string& uuid) : UUID(uuid.data(), uuid.size()) {}
59
62 explicit UUID(const std::array<uint8_t, 16>& data) : _data(data) {}
63 UUID(const UUID&) = default;
64 UUID(UUID&&) noexcept = default;
65 ~UUID() = default;
66
67 UUID& operator=(const std::string& uuid)
68 { _data = UUID(uuid).data(); return *this; }
69 UUID& operator=(const std::array<uint8_t, 16>& data)
70 { _data = data; return *this; }
71 UUID& operator=(const UUID&) = default;
72 UUID& operator=(UUID&&) noexcept = default;
73
74 // UUID comparison
75 friend bool operator==(const UUID& uuid1, const UUID& uuid2)
76 { return uuid1._data == uuid2._data; }
77 friend bool operator!=(const UUID& uuid1, const UUID& uuid2)
78 { return uuid1._data != uuid2._data; }
79 friend bool operator<(const UUID& uuid1, const UUID& uuid2)
80 { return uuid1._data < uuid2._data; }
81 friend bool operator>(const UUID& uuid1, const UUID& uuid2)
82 { return uuid1._data > uuid2._data; }
83 friend bool operator<=(const UUID& uuid1, const UUID& uuid2)
84 { return uuid1._data <= uuid2._data; }
85 friend bool operator>=(const UUID& uuid1, const UUID& uuid2)
86 { return uuid1._data >= uuid2._data; }
87
89 explicit operator bool() const noexcept { return *this != Nil(); }
90
92 std::array<uint8_t, 16>& data() noexcept { return _data; }
94 const std::array<uint8_t, 16>& data() const noexcept { return _data; }
95
97 std::string string() const;
98
100 static UUID Nil() { return UUID(); }
102 static UUID Sequential();
104 static UUID Random();
106 static UUID Secure();
108 static UUID Database();
109
111 friend std::ostream& operator<<(std::ostream& os, const UUID& uuid)
112 { os << uuid.string(); return os; }
113
115 void swap(UUID& uuid) noexcept;
116 friend void swap(UUID& uuid1, UUID& uuid2) noexcept;
117
118private:
119 std::array<uint8_t, 16> _data;
120};
121
123
124} // namespace CppCommon
125
127
131constexpr CppCommon::UUID operator ""_uuid(const char* uuid, size_t size)
132{
133 return CppCommon::UUID(uuid, size);
134}
135
136#include "uuid.inl"
137
138#endif // CPPCOMMON_SYSTEM_UUID_H
Universally unique identifier (UUID).
Definition uuid.h:37
UUID(const UUID &)=default
UUID & operator=(UUID &&) noexcept=default
friend bool operator<(const UUID &uuid1, const UUID &uuid2)
Definition uuid.h:79
static UUID Nil()
Generate nil UUID0 (all bits set to zero).
Definition uuid.h:100
UUID(UUID &&) noexcept=default
friend bool operator>(const UUID &uuid1, const UUID &uuid2)
Definition uuid.h:81
UUID & operator=(const std::array< uint8_t, 16 > &data)
Definition uuid.h:69
friend bool operator<=(const UUID &uuid1, const UUID &uuid2)
Definition uuid.h:83
friend bool operator>=(const UUID &uuid1, const UUID &uuid2)
Definition uuid.h:85
std::string string() const
Get string from the current UUID in format "00000000-0000-0000-0000-000000000000".
Definition uuid.cpp:26
static UUID Random()
Generate random UUID4 (randomly or pseudo-randomly generated version).
Definition uuid.cpp:100
std::array< uint8_t, 16 > & data() noexcept
Get the UUID data buffer.
Definition uuid.h:92
UUID(const std::string &uuid)
Initialize UUID with a given string.
Definition uuid.h:57
UUID(const std::array< uint8_t, 16 > &data)
Initialize UUID with a given 16 bytes data buffer.
Definition uuid.h:62
friend std::ostream & operator<<(std::ostream &os, const UUID &uuid)
Output instance into the given output stream.
Definition uuid.h:111
void swap(UUID &uuid) noexcept
Swap two instances.
Definition uuid.inl:67
static UUID Sequential()
Generate sequential UUID1 (time based version).
Definition uuid.cpp:44
friend bool operator!=(const UUID &uuid1, const UUID &uuid2)
Definition uuid.h:77
static UUID Secure()
Generate secure UUID4 (secure generated version).
Definition uuid.cpp:156
constexpr UUID(const char(&uuid)[N])
Initialize UUID with a given string literal.
Definition uuid.h:46
constexpr UUID()
Default constructor.
Definition uuid.h:40
UUID & operator=(const UUID &)=default
const std::array< uint8_t, 16 > & data() const noexcept
Get the UUID data buffer.
Definition uuid.h:94
static UUID Database()
Generate database UUID7 (time ordered, high locality version).
Definition uuid.cpp:170
Exceptions definition.
C++ Common project definitions.
Universally unique identifier (UUID) inline implementation.