diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/yt/misc/guid-inl.h | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/yt/misc/guid-inl.h')
-rw-r--r-- | library/cpp/yt/misc/guid-inl.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/library/cpp/yt/misc/guid-inl.h b/library/cpp/yt/misc/guid-inl.h new file mode 100644 index 00000000000..2d94b5701b0 --- /dev/null +++ b/library/cpp/yt/misc/guid-inl.h @@ -0,0 +1,76 @@ +#ifndef GUID_INL_H_ +#error "Direct inclusion of this file is not allowed, include guid.h" +// For the sake of sane code completion. +#include "guid.h" +#endif + +namespace NYT { + +//////////////////////////////////////////////////////////////////////////////// + +Y_FORCE_INLINE constexpr TGuid::TGuid() + : Parts32{} +{ } + +Y_FORCE_INLINE constexpr TGuid::TGuid(ui32 part0, ui32 part1, ui32 part2, ui32 part3) + : Parts32{part0, part1, part2, part3} +{ } + +Y_FORCE_INLINE constexpr TGuid::TGuid(ui64 part0, ui64 part1) + : Parts64{part0, part1} +{ } + +Y_FORCE_INLINE bool TGuid::IsEmpty() const +{ + return Parts64[0] == 0 && Parts64[1] == 0; +} + +Y_FORCE_INLINE TGuid::operator bool() const +{ + return !IsEmpty(); +} + +//////////////////////////////////////////////////////////////////////////////// + +Y_FORCE_INLINE bool operator == (TGuid lhs, TGuid rhs) +{ + return lhs.Parts64[0] == rhs.Parts64[0] && + lhs.Parts64[1] == rhs.Parts64[1]; +} + +Y_FORCE_INLINE bool operator != (TGuid lhs, TGuid rhs) +{ + return !(lhs == rhs); +} + +Y_FORCE_INLINE bool operator < (TGuid lhs, TGuid rhs) +{ +#ifdef __GNUC__ + ui64 lhs0 = __builtin_bswap64(lhs.Parts64[0]); + ui64 rhs0 = __builtin_bswap64(rhs.Parts64[0]); + if (lhs0 < rhs0) { + return true; + } + if (lhs0 > rhs0) { + return false; + } + ui64 lhs1 = __builtin_bswap64(lhs.Parts64[1]); + ui64 rhs1 = __builtin_bswap64(rhs.Parts64[1]); + return lhs1 < rhs1; +#else + return memcmp(&lhs, &rhs, sizeof(TGuid)) < 0; +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT + +Y_FORCE_INLINE size_t THash<NYT::TGuid>::operator()(const NYT::TGuid& guid) const +{ + const size_t p = 1000000009; // prime number + return guid.Parts32[0] + + guid.Parts32[1] * p + + guid.Parts32[2] * p * p + + guid.Parts32[3] * p * p * p; +} |