4#ifndef _Stroika_Foundation_Common_GUID_h_
5#define _Stroika_Foundation_Common_GUID_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
11#if qStroika_Foundation_Common_Platform_Windows
17#include "Stroika/Foundation/Common/Common.h"
18#include "Stroika/Foundation/Common/Concepts.h"
23namespace Stroika::Foundation::Memory {
43 static GUID mk_ (
const string& src);
58 constexpr GUID () noexcept = default;
59#if qStroika_Foundation_Common_Platform_Windows
60 constexpr GUID (const ::GUID& src)
noexcept;
62 template <Characters::IConvertibleToString STRISH_TYPE>
63 GUID (STRISH_TYPE&& src);
65 GUID (
const array<byte, 16>& src)
noexcept;
66 GUID (
const array<uint8_t, 16>& src)
noexcept;
88 using value_type = byte;
94 nonvirtual
const byte*
begin () const noexcept;
100 nonvirtual const
byte*
end () const noexcept;
105 constexpr
size_t size () const noexcept;
110 nonvirtual explicit operator Memory::BLOB () const;
115 nonvirtual strong_ordering operator<=> (const
GUID&) const noexcept = default;
120 nonvirtual const uint8_t* data () const noexcept;
130 template <IAnyOf<Characters::String,
std::
string, Memory::BLOB, array<
byte, 16>, array<uint8_t, 16>> T>
131 nonvirtual T
As () const;
139 static_assert (sizeof (
GUID) == 16);
140 static_assert (ranges::range<
GUID>);
141 static_assert (regular<
GUID>);
142 static_assert (totally_ordered<
GUID>);
151struct qStroika_Foundation_Characters_FMT_PREFIX_::formatter<Stroika::Foundation::Common::
GUID,
wchar_t>
152 : qStroika_Foundation_Characters_FMT_PREFIX_::formatter<
std::wstring,
wchar_t> {
153 using inherited = qStroika_Foundation_Characters_FMT_PREFIX_::formatter<std::wstring, wchar_t>;
154 template <
class FmtContext>
159 : qStroika_Foundation_Characters_FMT_PREFIX_::formatter<std::string, char> {
160 using inherited = qStroika_Foundation_Characters_FMT_PREFIX_::formatter<std::string, char>;
161 template <
class FmtContext>
166 template <
typename T>
167 struct DefaultSerializer;
String is like std::u32string, except it is much easier to use, often much more space efficient,...
static GUID GenerateNew() noexcept
constexpr GUID() noexcept=default
nonvirtual const byte * end() const noexcept
nonvirtual const byte * begin() const noexcept
nonvirtual Characters::String ToString() const