49#if defined(SMTG_OS_WINDOWS) && SMTG_OS_WINDOWS == 1
50 static constexpr bool defaultComFormat =
true;
52 static constexpr bool defaultComFormat =
false;
55 using TUID = Steinberg::TUID;
57 constexpr UID ()
noexcept =
default;
60 UID (
const TUID& uid)
noexcept;
61 UID (
const UID& uid)
noexcept;
62 UID& operator= (
const UID& uid)
noexcept;
63 UID& operator= (
const TUID& uid)
noexcept;
65 constexpr const TUID& data ()
const noexcept;
66 constexpr size_t size ()
const noexcept;
68 std::string toString (
bool comFormat = defaultComFormat)
const noexcept;
70 template<
typename StringT>
72 bool comFormat = defaultComFormat)
noexcept;
74 static UID fromTUID (
const TUID _uid)
noexcept;
77 Steinberg::TUID _data {};
89inline bool operator== (
const UID& uid1,
const UID& uid2)
93 return p1[0] == p2[0] && p1[1] == p2[1];
97inline bool operator!= (
const UID& uid1,
const UID& uid2)
99 return !(uid1 == uid2);
103inline bool operator< (
const UID& uid1,
const UID& uid2)
107 return (p1[0] < p2[0]) && (p1[1] < p2[1]);
111inline UID::UID (uint32_t l1, uint32_t l2, uint32_t l3, uint32_t l4,
bool comFormat)
noexcept
115 _data[0] =
static_cast<int8_t> ((l1 & 0x000000FF));
116 _data[1] =
static_cast<int8_t> ((l1 & 0x0000FF00) >> 8);
117 _data[2] =
static_cast<int8_t> ((l1 & 0x00FF0000) >> 16);
118 _data[3] =
static_cast<int8_t> ((l1 & 0xFF000000) >> 24);
119 _data[4] =
static_cast<int8_t> ((l2 & 0x00FF0000) >> 16);
120 _data[5] =
static_cast<int8_t> ((l2 & 0xFF000000) >> 24);
121 _data[6] =
static_cast<int8_t> ((l2 & 0x000000FF));
122 _data[7] =
static_cast<int8_t> ((l2 & 0x0000FF00) >> 8);
123 _data[8] =
static_cast<int8_t> ((l3 & 0xFF000000) >> 24);
124 _data[9] =
static_cast<int8_t> ((l3 & 0x00FF0000) >> 16);
125 _data[10] =
static_cast<int8_t> ((l3 & 0x0000FF00) >> 8);
126 _data[11] =
static_cast<int8_t> ((l3 & 0x000000FF));
127 _data[12] =
static_cast<int8_t> ((l4 & 0xFF000000) >> 24);
128 _data[13] =
static_cast<int8_t> ((l4 & 0x00FF0000) >> 16);
129 _data[14] =
static_cast<int8_t> ((l4 & 0x0000FF00) >> 8);
130 _data[15] =
static_cast<int8_t> ((l4 & 0x000000FF));
134 _data[0] =
static_cast<int8_t> ((l1 & 0xFF000000) >> 24);
135 _data[1] =
static_cast<int8_t> ((l1 & 0x00FF0000) >> 16);
136 _data[2] =
static_cast<int8_t> ((l1 & 0x0000FF00) >> 8);
137 _data[3] =
static_cast<int8_t> ((l1 & 0x000000FF));
138 _data[4] =
static_cast<int8_t> ((l2 & 0xFF000000) >> 24);
139 _data[5] =
static_cast<int8_t> ((l2 & 0x00FF0000) >> 16);
140 _data[6] =
static_cast<int8_t> ((l2 & 0x0000FF00) >> 8);
141 _data[7] =
static_cast<int8_t> ((l2 & 0x000000FF));
142 _data[8] =
static_cast<int8_t> ((l3 & 0xFF000000) >> 24);
143 _data[9] =
static_cast<int8_t> ((l3 & 0x00FF0000) >> 16);
144 _data[10] =
static_cast<int8_t> ((l3 & 0x0000FF00) >> 8);
145 _data[11] =
static_cast<int8_t> ((l3 & 0x000000FF));
146 _data[12] =
static_cast<int8_t> ((l4 & 0xFF000000) >> 24);
147 _data[13] =
static_cast<int8_t> ((l4 & 0x00FF0000) >> 16);
148 _data[14] =
static_cast<int8_t> ((l4 & 0x0000FF00) >> 8);
149 _data[15] =
static_cast<int8_t> ((l4 & 0x000000FF));
154inline UID::UID (
const TUID& uid)
noexcept
160inline UID::UID (
const UID& uid)
noexcept
166inline UID& UID::operator= (
const UID& uid)
noexcept
173inline UID& UID::operator= (
const TUID& uid)
noexcept
183inline constexpr auto UID::data () const noexcept -> const TUID&
189inline constexpr size_t UID::size () const noexcept
191 return sizeof (TUID);
195inline std::string UID::toString (
bool comFormat)
const noexcept
201 const auto& g =
reinterpret_cast<const GUID*
> (_data);
204 snprintf (tmp, 21,
"%08X%04X%04X", g->Data1, g->Data2, g->Data3);
207 for (uint32_t i = 0; i < 8; ++i)
210 snprintf (s, 3,
"%02X", g->Data4[i]);
216 for (uint32_t i = 0; i < 16; ++i)
227template<
typename StringT>
228inline Optional<UID> UID::fromString (
const StringT& str,
bool comFormat)
noexcept
230 if (str.length () != 32)
241 sscanf (s,
"%x", &g.Data1);
242 strcpy (s, str.data () + 8);
244 sscanf (s,
"%hx", &g.Data2);
245 strcpy (s, str.data () + 12);
247 sscanf (s,
"%hx", &g.Data3);
251 for (uint32_t i = 8; i < 16; ++i)
255 s2[1] = str[i * 2 + 1];
259 uid[i] =
static_cast<char> (d);
266 for (uint32_t i = 0; i < 16; ++i)
270 s[1] = str[i * 2 + 1];
274 uid[i] =
static_cast<char> (d);
281inline UID UID::fromTUID (
const TUID _uid)
noexcept
char TUID[16]
plain UID type