8#ifndef INCLUDED_BDLB_GUID
9#define INCLUDED_BDLB_GUID
13#include <bdlscm_version.h>
176#include <bsl_algorithm.h>
177#include <bsl_cstddef.h>
178#include <bsl_cstdint.h>
179#include <bsl_cstring.h>
180#include <bsl_iosfwd.h>
229 unsigned char *modifiableData();
289 const unsigned char&
operator[](bsl::size_t offset)
const;
291 const unsigned char *
begin()
const;
295 const unsigned char *
data()
const;
299 const unsigned char *
end()
const;
321 unsigned short timeHi()
const;
333 unsigned short timeMid()
const;
348 void format(bsl::span<char, k_GUID_NUM_CHARS> buffer)
const;
366 bsl::ostream&
print(bsl::ostream& stream,
368 int spacesPerLevel = 4)
const;
426template <
class HASH_ALGORITHM>
454 unsigned short timeMid,
455 unsigned short timeHiAndVersion,
456 unsigned char clockSeqHiRes,
457 unsigned char clockSeqLow,
460 typedef unsigned char uc;
462 modifiableData()[ 0] = uc(
timeLow >> 24);
463 modifiableData()[ 1] = uc(
timeLow >> 16);
464 modifiableData()[ 2] = uc(
timeLow >> 8);
465 modifiableData()[ 3] = uc(
timeLow);
467 modifiableData()[ 4] = uc(
timeMid >> 8);
468 modifiableData()[ 5] = uc(
timeMid);
477 modifiableData()[10] = uc(
node >> 40);
478 modifiableData()[11] = uc(
node >> 32);
479 modifiableData()[12] = uc(
node >> 24);
480 modifiableData()[13] = uc(
node >> 16);
481 modifiableData()[14] = uc(
node >> 8);
482 modifiableData()[15] = uc(
node);
487unsigned char *Guid::modifiableData()
489 return reinterpret_cast<unsigned char *
>(d_alignedBuffer.buffer());
505 BSLMF_ASSERT(
sizeof(d_alignedBuffer) >=
sizeof(uint32_t) *
517 return data()[offset];
529 return reinterpret_cast<const unsigned char *
>(d_alignedBuffer.buffer());
578 typedef unsigned short us;
579 return us(
data()[6] << 8 |
585 typedef unsigned long ul;
586 return ul(
data()[0]) << 24 |
594 typedef unsigned short us;
595 return us(
data()[4] << 8 |
601 typedef unsigned char uc;
607 typedef unsigned char uc;
617 return guid.
print(stream, 0, -1);
624 lhs.data(),
lhs.data() +
lhs.k_GUID_NUM_BYTES,
rhs.data());
631 lhs.data(),
lhs.data() +
lhs.k_GUID_NUM_BYTES,
rhs.data());
634template <
class HASH_ALGORITHM>
637 hashAlgorithm(guid.data(), Guid::k_GUID_NUM_BYTES);
#define BSLMF_NESTED_TRAIT_DECLARATION(t_TYPE, t_TRAIT)
Definition bslmf_nestedtraitdeclaration.h:231
Definition bdlb_guid.h:201
const unsigned char * data() const
Definition bdlb_guid.h:527
unsigned short timeMid() const
Definition bdlb_guid.h:593
unsigned char clockSeqHiRes() const
Definition bdlb_guid.h:547
@ k_GUID_NUM_BYTES
Definition bdlb_guid.h:205
const unsigned char * begin() const
Definition bdlb_guid.h:521
Guid()
Definition bdlb_guid.h:438
@ k_GUID_NUM_32BITS
Definition bdlb_guid.h:206
void format(bsl::span< char, k_GUID_NUM_CHARS > buffer) const
Guid & operator=(const Guid &rhs)=default
unsigned short timeHiAndVersion() const
Definition bdlb_guid.h:576
friend bool operator!=(const Guid &lhs, const Guid &rhs)
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
unsigned char clockSeqHi() const
Definition bdlb_guid.h:541
friend bool operator==(const Guid &lhs, const Guid &rhs)
unsigned char clockSeqLow() const
Definition bdlb_guid.h:553
unsigned char variant() const
Definition bdlb_guid.h:600
unsigned long timeLow() const
Definition bdlb_guid.h:584
Guid(const Guid &original)=default
unsigned char version() const
Definition bdlb_guid.h:606
const unsigned char & operator[](bsl::size_t offset) const
Definition bdlb_guid.h:514
const unsigned char * end() const
Definition bdlb_guid.h:533
bsls::Types::Uint64 node() const
Definition bdlb_guid.h:559
unsigned short timeHi() const
Definition bdlb_guid.h:570
~Guid()=default
Destroy this object.
@ k_GUID_NUM_CHARS
Definition bdlb_guid.h:207
Definition bsls_alignedbuffer.h:262
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlb_algorithmworkaroundutil.h:74
bool operator!=(const BigEndianInt16 &lhs, const BigEndianInt16 &rhs)
bsl::ostream & operator<<(bsl::ostream &stream, const BigEndianInt16 &integer)
bool operator>=(const Guid &lhs, const Guid &rhs)
void hashAppend(HASH_ALGORITHM &hashAlgorithm, const BigEndianInt16 &object)
bool operator<=(const Guid &lhs, const Guid &rhs)
bool operator==(const BigEndianInt16 &lhs, const BigEndianInt16 &rhs)
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
ALLOCATOR & lhs
Definition bslstl_string.h:3917
Definition bslmf_istriviallycopyable.h:324
Definition bslmf_isbitwiseequalitycomparable.h:500
Definition bsls_alignmentfromtype.h:378
unsigned long long Uint64
Definition bsls_types.h:139