9#ifndef CPPCOMMON_SYSTEM_UUID_H
10#define CPPCOMMON_SYSTEM_UUID_H
40 constexpr UUID() : _data() { _data.fill(0); }
46 explicit constexpr UUID(
const char(&uuid)[N]) :
UUID(uuid, N) {}
52 explicit constexpr UUID(
const char* uuid,
size_t size);
57 explicit UUID(
const std::string& uuid) :
UUID(uuid.
data(), uuid.size()) {}
62 explicit UUID(
const std::array<uint8_t, 16>&
data) : _data(
data) {}
67 UUID& operator=(const std::
string& uuid)
68 { _data =
UUID(uuid).data();
return *
this; }
70 { _data =
data;
return *
this; }
75 friend
bool operator==(const
UUID& uuid1, const
UUID& uuid2)
76 {
return uuid1._data == uuid2._data; }
78 {
return uuid1._data != uuid2._data; }
80 {
return uuid1._data < uuid2._data; }
82 {
return uuid1._data > uuid2._data; }
84 {
return uuid1._data <= uuid2._data; }
86 {
return uuid1._data >= uuid2._data; }
89 explicit operator bool() const noexcept {
return *
this !=
Nil(); }
92 std::array<uint8_t, 16>&
data() noexcept {
return _data; }
94 const std::array<uint8_t, 16>&
data() const noexcept {
return _data; }
97 std::string
string()
const;
112 { os << uuid.
string();
return os; }
119 std::array<uint8_t, 16> _data;
Universally unique identifier (UUID).
UUID(const UUID &)=default
UUID & operator=(UUID &&) noexcept=default
friend bool operator<(const UUID &uuid1, const UUID &uuid2)
static UUID Nil()
Generate nil UUID0 (all bits set to zero).
UUID(UUID &&) noexcept=default
friend bool operator>(const UUID &uuid1, const UUID &uuid2)
UUID & operator=(const std::array< uint8_t, 16 > &data)
friend bool operator<=(const UUID &uuid1, const UUID &uuid2)
friend bool operator>=(const UUID &uuid1, const UUID &uuid2)
std::string string() const
Get string from the current UUID in format "00000000-0000-0000-0000-000000000000".
static UUID Random()
Generate random UUID4 (randomly or pseudo-randomly generated version).
std::array< uint8_t, 16 > & data() noexcept
Get the UUID data buffer.
UUID(const std::string &uuid)
Initialize UUID with a given string.
UUID(const std::array< uint8_t, 16 > &data)
Initialize UUID with a given 16 bytes data buffer.
friend std::ostream & operator<<(std::ostream &os, const UUID &uuid)
Output instance into the given output stream.
void swap(UUID &uuid) noexcept
Swap two instances.
static UUID Sequential()
Generate sequential UUID1 (time based version).
friend bool operator!=(const UUID &uuid1, const UUID &uuid2)
static UUID Secure()
Generate secure UUID4 (secure generated version).
constexpr UUID(const char(&uuid)[N])
Initialize UUID with a given string literal.
constexpr UUID()
Default constructor.
UUID & operator=(const UUID &)=default
const std::array< uint8_t, 16 > & data() const noexcept
Get the UUID data buffer.
static UUID Database()
Generate database UUID7 (time ordered, high locality version).
C++ Common project definitions.
Universally unique identifier (UUID) inline implementation.