Kaspersky Neuromorphic Platform  1.0.0
API Reference
Loading...
Searching...
No Matches
uid.h
Go to the documentation of this file.
1
22#pragma once
23
24#include <algorithm>
25#include <array>
26#include <functional>
27#include <sstream>
28#include <string>
29#include <utility>
30
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>
35
36
40namespace knp::core
41{
42
43#if defined(_DEBUG) || defined(DEBUG)
44# define _ENABLE_PSEUDO_UID_GENERATOR 1
45#endif
46
52{
53public:
58 ::boost::uuids::uuid operator()() const;
63 static void reset(uint64_t initial_value = 1);
64};
65
66#if defined(_ENABLE_PSEUDO_UID_GENERATOR)
67# define uid_generator continuously_uid_generator
68#else
72# define uid_generator ::boost::uuids::random_generator
73#endif
74
75
79struct UID
80{
87 explicit UID(bool random) : tag(random ? uid_generator()() : ::boost::uuids::nil_uuid()) {}
88
92 UID() : UID(true) {}
93
98 explicit UID(const ::boost::uuids::uuid &guid) : tag(guid) {}
103 explicit UID(::boost::uuids::uuid &&guid) : tag(guid) {}
104
109 explicit UID(const std::array<
110 boost::uuids::uuid::value_type, sizeof(boost::uuids::uuid::data) / sizeof(boost::uuids::uuid::data[0])>
111 &guid_value)
112 {
113 std::copy(guid_value.begin(), guid_value.end(), tag.begin());
114 }
115
120 UID(const UID &) = default;
121
127 operator const ::boost::uuids::uuid &() const { return tag; }
128
133 operator ::boost::uuids::uuid &() { return tag; }
134
139 explicit operator ::std::string() const
140 {
141 std::stringstream ss;
142 ss << tag;
143 return ss.str();
144 }
145
150 explicit operator bool() const { return !tag.is_nil(); }
151
157 bool operator<(const UID &uid) const { return uid.tag < tag; }
158
164 bool operator==(const UID &uid) const { return uid.tag == tag; }
165
171 bool operator!=(const UID &uid) const { return uid.tag != tag; }
172
176 ::boost::uuids::uuid tag;
177};
178
179
186inline ::std::ostream &operator<<(std::ostream &s, const UID &uid)
187{
188 s << uid.tag;
189 return s;
190}
191
198inline ::std::istream &operator>>(std::istream &s, UID &uid)
199{
200 s >> uid.tag;
201 return s;
202}
203
204
209{
215 auto operator()(const UID &uid) const { return boost::hash<boost::uuids::uuid>()(uid.tag); }
216};
217
218} // namespace knp::core
UID generator for entities.
Definition uid.h:52
static void reset(uint64_t initial_value=1)
Reset UID counter.
::boost::uuids::uuid operator()() const
Generate next UID.
Core library namespace.
Definition backend.h:50
inline ::std::ostream & operator<<(std::ostream &s, const UID &uid)
Send UID to an output stream.
Definition uid.h:186
inline ::std::istream & operator>>(std::istream &s, UID &uid)
Get UID from an input stream.
Definition uid.h:198
The UID class is a definition of unique identifiers for entities.
Definition uid.h:80
UID(const ::boost::uuids::uuid &guid)
Create a UID from boost::uuids::uuid.
Definition uid.h:98
UID(::boost::uuids::uuid &&guid)
Create a UID from boost::uuids::uuid.
Definition uid.h:103
bool operator<(const UID &uid) const
Check if the current UID is less than the specified UID.
Definition uid.h:157
bool operator!=(const UID &uid) const
Check if two UIDs are different.
Definition uid.h:171
UID(bool random)
Generate a random UID.
Definition uid.h:87
::boost::uuids::uuid tag
UID value.
Definition uid.h:176
UID()
Default UID constructor.
Definition uid.h:92
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.
Definition uid.h:109
bool operator==(const UID &uid) const
Check if two UIDs are the same.
Definition uid.h:164
UID hash functor type.
Definition uid.h:209
auto operator()(const UID &uid) const
Get a hash value of the specified UID.
Definition uid.h:215
#define uid_generator
Default UID generator.
Definition uid.h:72