12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #pragma once
- #include "fwd.h"
- #include <util/str_stl.h>
- /**
- * UUID generation
- *
- * NOTE: It is not a real GUID (RFC 4122), as described in
- * https://en.wikipedia.org/wiki/Universally_unique_identifier
- * https://en.wikipedia.org/wiki/Globally_unique_identifier
- *
- * See https://clubs.at.yandex-team.ru/stackoverflow/10238/10240
- * and https://st.yandex-team.ru/IGNIETFERRO-768 for details.
- */
- struct TGUID {
- ui32 dw[4] = {};
- constexpr bool IsEmpty() const noexcept {
- return (dw[0] | dw[1] | dw[2] | dw[3]) == 0;
- }
- constexpr explicit operator bool() const noexcept {
- return !IsEmpty();
- }
- // xxxx-xxxx-xxxx-xxxx
- TString AsGuidString() const;
- /**
- * RFC4122 GUID, which described in
- * https://en.wikipedia.org/wiki/Universally_unique_identifier
- * xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- **/
- TString AsUuidString() const;
- static TGUID Create();
- /**
- * Generate time based UUID version 1 RFC4122 GUID
- * https://datatracker.ietf.org/doc/html/rfc4122#section-4.1
- **/
- static TGUID CreateTimebased();
- };
- constexpr bool operator==(const TGUID& a, const TGUID& b) noexcept {
- return a.dw[0] == b.dw[0] && a.dw[1] == b.dw[1] && a.dw[2] == b.dw[2] && a.dw[3] == b.dw[3];
- }
- constexpr bool operator!=(const TGUID& a, const TGUID& b) noexcept {
- return !(a == b);
- }
- struct TGUIDHash {
- constexpr int operator()(const TGUID& a) const noexcept {
- return a.dw[0] + a.dw[1] + a.dw[2] + a.dw[3];
- }
- };
- template <>
- struct THash<TGUID> {
- constexpr size_t operator()(const TGUID& g) const noexcept {
- return (unsigned int)TGUIDHash()(g);
- }
- };
- void CreateGuid(TGUID* res);
- TString GetGuidAsString(const TGUID& g);
- TString CreateGuidAsString();
- TGUID GetGuid(TStringBuf s);
- bool GetGuid(TStringBuf s, TGUID& result);
- /**
- * Functions for correct parsing RFC4122 GUID, which described in
- * https://en.wikipedia.org/wiki/Universally_unique_identifier
- **/
- TGUID GetUuid(TStringBuf s);
- bool GetUuid(TStringBuf s, TGUID& result);
|