31#include <boost/functional/hash.hpp>
32#include <boost/uuid/uuid.hpp>
33#include <boost/uuid/uuid_generators.hpp>
34#include <boost/uuid/uuid_io.hpp>
43#if defined(_DEBUG) || defined(DEBUG)
44# define _ENABLE_PSEUDO_UID_GENERATOR 1
63 static void reset(uint64_t initial_value = 1);
66#if defined(_ENABLE_PSEUDO_UID_GENERATOR)
67# define uid_generator continuously_uid_generator
72# define uid_generator ::boost::uuids::random_generator
98 explicit UID(const ::boost::uuids::uuid &guid) :
tag(guid) {}
103 explicit UID(::boost::uuids::uuid &&guid) :
tag(guid) {}
109 explicit UID(
const std::array<
110 boost::uuids::uuid::value_type,
sizeof(boost::uuids::uuid::data) /
sizeof(boost::uuids::uuid::data[0])>
113 std::copy(guid_value.begin(), guid_value.end(),
tag.begin());
127 operator const ::boost::uuids::uuid &()
const {
return tag; }
133 operator ::boost::uuids::uuid &() {
return tag; }
139 explicit operator ::std::string()
const
141 std::stringstream ss;
150 explicit operator bool()
const {
return !
tag.is_nil(); }
215 auto operator()(
const UID &uid)
const {
return boost::hash<boost::uuids::uuid>()(uid.
tag); }
UID generator for entities.
static void reset(uint64_t initial_value=1)
Reset UID counter.
::boost::uuids::uuid operator()() const
Generate next UID.
inline ::std::ostream & operator<<(std::ostream &s, const UID &uid)
Send UID to an output stream.
inline ::std::istream & operator>>(std::istream &s, UID &uid)
Get UID from an input stream.
The UID class is a definition of unique identifiers for entities.
UID(const ::boost::uuids::uuid &guid)
Create a UID from boost::uuids::uuid.
UID(::boost::uuids::uuid &&guid)
Create a UID from boost::uuids::uuid.
bool operator<(const UID &uid) const
Check if the current UID is less than the specified UID.
bool operator!=(const UID &uid) const
Check if two UIDs are different.
UID(bool random)
Generate a random UID.
::boost::uuids::uuid tag
UID value.
UID()
Default UID constructor.
UID(const UID &)=default
Constructor that creates a copy of an existing UID.
UID(const std::array< boost::uuids::uuid::value_type, sizeof(boost::uuids::uuid::data)/sizeof(boost::uuids::uuid::data[0])> &guid_value)
Create a UID from an array of 16 uint8_t integers.
bool operator==(const UID &uid) const
Check if two UIDs are the same.
auto operator()(const UID &uid) const
Get a hash value of the specified UID.
#define uid_generator
Default UID generator.