PeriDyno 1.2.1
Loading...
Searching...
No Matches
guid.cpp
Go to the documentation of this file.
1#include "guid.hpp"
2#include <objbase.h>
3
4namespace Wt
5{
6 Guid::Guid(const std::array<unsigned char, 16>& bytes) : _bytes(bytes) { }
7
8 Guid::Guid(std::array<unsigned char, 16>&& bytes) : _bytes(std::move(bytes)) { }
9
10 Guid::Guid() : _bytes{ {0} } { }
11
12 bool Guid::operator==(const Guid& other) const
13 {
14 return _bytes == other._bytes;
15 }
16
17 bool Guid::operator!=(const Guid& other) const
18 {
19 return !((*this) == other);
20 }
21
22 std::string Guid::str() const
23 {
24 char one[10], two[6], three[6], four[6], five[14];
25
26 snprintf(one, 10, "%02x%02x%02x%02x",
27 _bytes[0], _bytes[1], _bytes[2], _bytes[3]);
28 snprintf(two, 6, "%02x%02x",
29 _bytes[4], _bytes[5]);
30 snprintf(three, 6, "%02x%02x",
31 _bytes[6], _bytes[7]);
32 snprintf(four, 6, "%02x%02x",
33 _bytes[8], _bytes[9]);
34 snprintf(five, 14, "%02x%02x%02x%02x%02x%02x",
35 _bytes[10], _bytes[11], _bytes[12], _bytes[13], _bytes[14], _bytes[15]);
36 const std::string sep("-");
37 std::string out(one);
38
39 out += sep + two;
40 out += sep + three;
41 out += sep + four;
42 out += sep + five;
43
44 return out;
45 }
46
47 // conversion operator for std::string
48 Guid::operator std::string() const
49 {
50 return str();
51 }
52
53 const std::array<unsigned char, 16>& Guid::bytes() const
54 {
55 return _bytes;
56 }
57
58 void Guid::swap(Guid& other)
59 {
60 _bytes.swap(other._bytes);
61 }
62
63
64 bool Guid::isValid() const
65 {
66 Guid empty;
67 return *this != empty;
68 }
69
70 std::ostream& operator<<(std::ostream& s, const Guid& guid)
71 {
72 std::ios_base::fmtflags f(s.flags()); // politely don't leave the ostream in hex mode
73 s << std::hex << std::setfill('0')
74 << std::setw(2) << (int)guid._bytes[0]
75 << std::setw(2) << (int)guid._bytes[1]
76 << std::setw(2) << (int)guid._bytes[2]
77 << std::setw(2) << (int)guid._bytes[3]
78 << "-"
79 << std::setw(2) << (int)guid._bytes[4]
80 << std::setw(2) << (int)guid._bytes[5]
81 << "-"
82 << std::setw(2) << (int)guid._bytes[6]
83 << std::setw(2) << (int)guid._bytes[7]
84 << "-"
85 << std::setw(2) << (int)guid._bytes[8]
86 << std::setw(2) << (int)guid._bytes[9]
87 << "-"
88 << std::setw(2) << (int)guid._bytes[10]
89 << std::setw(2) << (int)guid._bytes[11]
90 << std::setw(2) << (int)guid._bytes[12]
91 << std::setw(2) << (int)guid._bytes[13]
92 << std::setw(2) << (int)guid._bytes[14]
93 << std::setw(2) << (int)guid._bytes[15];
94 s.flags(f);
95 return s;
96 }
97
98 bool operator<(const Wt::Guid& lhs, const Wt::Guid& rhs)
99 {
100 return lhs.bytes() < rhs.bytes();
101 }
102
104 {
105 GUID newId;
106 CoCreateGuid(&newId);
107
108 std::array<unsigned char, 16> bytes =
109 {
110 (unsigned char)((newId.Data1 >> 24) & 0xFF),
111 (unsigned char)((newId.Data1 >> 16) & 0xFF),
112 (unsigned char)((newId.Data1 >> 8) & 0xFF),
113 (unsigned char)((newId.Data1) & 0xff),
114
115 (unsigned char)((newId.Data2 >> 8) & 0xFF),
116 (unsigned char)((newId.Data2) & 0xff),
117
118 (unsigned char)((newId.Data3 >> 8) & 0xFF),
119 (unsigned char)((newId.Data3) & 0xFF),
120
121 (unsigned char)newId.Data4[0],
122 (unsigned char)newId.Data4[1],
123 (unsigned char)newId.Data4[2],
124 (unsigned char)newId.Data4[3],
125 (unsigned char)newId.Data4[4],
126 (unsigned char)newId.Data4[5],
127 (unsigned char)newId.Data4[6],
128 (unsigned char)newId.Data4[7]
129 };
130
131 return Guid{ std::move(bytes) };
132 }
133}
134
135namespace std
136{
137 template <>
138 void swap(Wt::Guid& lhs, Wt::Guid& rhs) noexcept
139 {
140 lhs.swap(rhs);
141 }
142}
bool operator<(const Index2D &lhs, const Index2D &rhs)
@ out
bool isValid() const
Definition guid.cpp:64
bool operator!=(const Guid &other) const
Definition guid.cpp:17
std::array< unsigned char, 16 > _bytes
Definition guid.hpp:36
const std::array< unsigned char, 16 > & bytes() const
Definition guid.cpp:53
Guid(const std::array< unsigned char, 16 > &bytes)
Definition guid.cpp:6
void swap(Guid &other)
Definition guid.cpp:58
std::string str() const
Definition guid.cpp:22
Guid()
Definition guid.cpp:10
friend std::ostream & operator<<(std::ostream &s, const Guid &guid)
Definition guid.cpp:70
bool operator==(const Guid &other) const
Definition guid.cpp:12
Definition guid.cpp:5
Guid newGuid()
Definition guid.cpp:103
Definition guid.cpp:136
void swap(Wt::Guid &lhs, Wt::Guid &rhs) noexcept
Definition guid.cpp:138