8 #include <boost/config.hpp>
9 #include <boost/functional/hash.hpp>
13 #include <ka/macroregular.hpp>
35 using Digest = std::array<uint32_t, 5>;
36 using U32Iterator = Digest::iterator;
37 using U32ConstIterator = Digest::const_iterator;
42 static uint8_t* toUInt8Ptr(T* a)
44 return reinterpret_cast<uint8_t*
>(a);
48 static const uint8_t* toUInt8Ptr(
const T* a)
50 return reinterpret_cast<const uint8_t*
>(a);
54 explicit PtrUid(
const Uuid& machineUuid,
const Uuid& processUuid,
const void* ptr);
61 KA_GENERATE_FRIEND_REGULAR_OPS_1(
PtrUid, digest)
64 friend
QI_API std::ostream& operator<<(std::ostream& o, const
PtrUid& uid);
69 return toUInt8Ptr(&*beginUInt32(a));
74 return begin(a) + size(a);
79 return begin(const_cast<PtrUid&>(a));
84 return end(const_cast<PtrUid&>(a));
87 friend BOOST_CONSTEXPR
size_t size(
const PtrUid&) BOOST_NOEXCEPT
89 return sizeof(Digest) /
sizeof(
uint8_t);
92 friend BOOST_CONSTEXPR
bool empty(
const PtrUid& a) BOOST_NOEXCEPT
101 return begin(*
this)[n];
107 return begin(a.digest);
112 return end(a.digest);
117 return begin(a.digest);
122 return end(a.digest);
132 struct hash<qi::PtrUid>
136 static_assert(
sizeof(std::size_t) >=
sizeof(*beginUInt32(p)),
137 "A std::size_t must be large enough to store a uint32_t.");
138 return boost::hash_range(beginUInt32(p), endUInt32(p));
friend U32ConstIterator endUInt32(const PtrUid &a) BOOST_NOEXCEPT
friend U32ConstIterator beginUInt32(const PtrUid &a) BOOST_NOEXCEPT
friend uint8_t * end(PtrUid &a) BOOST_NOEXCEPT
#define QI_ASSERT(expr__)
const uint8_t & operator[](size_t n) const BOOST_NOEXCEPT
Return a const ref to allow the address of the element to be taken.
dll import/export and compiler message
friend U32Iterator beginUInt32(PtrUid &a) BOOST_NOEXCEPT
friend U32Iterator endUInt32(PtrUid &a) BOOST_NOEXCEPT
friend const uint8_t * begin(const PtrUid &a) BOOST_NOEXCEPT
friend BOOST_CONSTEXPR bool empty(const PtrUid &a) BOOST_NOEXCEPT
friend const uint8_t * end(const PtrUid &a) BOOST_NOEXCEPT
friend BOOST_CONSTEXPR size_t size(const PtrUid &) BOOST_NOEXCEPT
std::size_t operator()(const qi::PtrUid &p) const