12#if qStroika_Foundation_Common_Platform_Windows
13 constexpr GUID::GUID (const ::GUID& src) noexcept
18 for (
size_t i = 0; i < Memory::NEltsOf (Data4); ++i) {
19 Data4[i] = src.Data4[i];
24 template <Characters::IConvertibleToString STRISH_TYPE>
25 inline string AsAscii (STRISH_TYPE&& src)
29 if constexpr (same_as<STRISH_TYPE, Characters::String>) {
30 return src.AsASCII ();
32 if constexpr (IAnyOf<STRISH_TYPE, const char*, string_view, string>) {
33 return forward<STRISH_TYPE> (src);
35 return Characters::String{src}.AsASCII ();
38 template <Characters::IConvertibleToString STRISH_TYPE>
40 : GUID{mk_ (Private_::AsAscii (src))}
43 inline Common::GUID::GUID (
const array<uint8_t, 16>& src)
noexcept
45 ::memcpy (
this, src.data (), 16);
47 inline const byte* GUID::begin () const noexcept
49 return reinterpret_cast<const byte*
> (
this);
51 inline const byte* GUID::end () const noexcept
53 return reinterpret_cast<const byte*
> (
this) + 16;
55 constexpr size_t GUID::size () const noexcept
59 inline const uint8_t* GUID::data () const noexcept
61 return reinterpret_cast<const uint8_t*
> (
this);
63 template <IAnyOf<Characters::String, std::
string, Memory::BLOB, array<
byte, 16>, array<u
int8_t, 16>> T>
64 inline T Common::GUID::As ()
const
66 if constexpr (same_as<T, Characters::String>) {
68 Verify (::snprintf (buf, Memory::NEltsOf (buf),
"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", Data1, Data2, Data3,
69 Data4[0], Data4[1], Data4[2], Data4[3], Data4[4], Data4[5], Data4[6], Data4[7]) > 0);
72 else if constexpr (same_as<T, std::string>) {
74 Verify (::snprintf (buf, Memory::NEltsOf (buf),
"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", Data1, Data2, Data3,
75 Data4[0], Data4[1], Data4[2], Data4[3], Data4[4], Data4[5], Data4[6], Data4[7]) > 0);
78 else if constexpr (same_as<T, array<byte, 16>> or same_as<T, array<uint8_t, 16>>) {
79 return *
reinterpret_cast<const T*
> (
this);
81 else if constexpr (same_as<T, Memory::BLOB>) {
82 return T{begin (), end ()};
93template <
class FmtContext>
94inline typename FmtContext::iterator qStroika_Foundation_Characters_FMT_PREFIX_::formatter<Stroika::Foundation::Common::GUID, wchar_t>::format (
99template <
class FmtContext>
100inline typename FmtContext::iterator
102 FmtContext& ctx)
const
104 return this->inherited::format (s.
As<std::string> (), ctx);
String is like std::u32string, except it is much easier to use, often much more space efficient,...
constexpr GUID() noexcept=default