merge(3p/absl): subtree merge of Abseil up to e19260f
... notably, this includes Abseil's own StatusOr type, which conflicted with our implementation (that was taken from TensorFlow). Change-Id: Ie7d6764b64055caaeb8dc7b6b9d066291e6b538f
This commit is contained in:
parent
cc27324d02
commit
082c006c04
854 changed files with 11260 additions and 5296 deletions
2
third_party/abseil_cpp/absl/hash/BUILD.bazel
vendored
2
third_party/abseil_cpp/absl/hash/BUILD.bazel
vendored
|
@ -24,7 +24,7 @@ load(
|
|||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
licenses(["notice"]) # Apache 2.0
|
||||
licenses(["notice"])
|
||||
|
||||
cc_library(
|
||||
name = "hash",
|
||||
|
|
3
third_party/abseil_cpp/absl/hash/hash.h
vendored
3
third_party/abseil_cpp/absl/hash/hash.h
vendored
|
@ -88,7 +88,6 @@ ABSL_NAMESPACE_BEGIN
|
|||
// * T is an arithmetic or pointer type
|
||||
// * T defines an overload for `AbslHashValue(H, const T&)` for an arbitrary
|
||||
// hash state `H`.
|
||||
// - T defines a specialization of `HASH_NAMESPACE::hash<T>`
|
||||
// - T defines a specialization of `std::hash<T>`
|
||||
//
|
||||
// `absl::Hash` intrinsically supports the following types:
|
||||
|
@ -128,8 +127,6 @@ ABSL_NAMESPACE_BEGIN
|
|||
// * Natively supported types out of the box (see above)
|
||||
// * Types for which an `AbslHashValue()` overload is provided (such as
|
||||
// user-defined types). See "Adding Type Support to `absl::Hash`" below.
|
||||
// * Types which define a `HASH_NAMESPACE::hash<T>` specialization (aka
|
||||
// `__gnu_cxx::hash<T>` for gcc/Clang or `stdext::hash<T>` for MSVC)
|
||||
// * Types which define a `std::hash<T>` specialization
|
||||
//
|
||||
// The fallback to legacy hash functions exists mainly for backwards
|
||||
|
|
|
@ -82,8 +82,8 @@ TYPED_TEST_P(HashValueIntTest, FastPath) {
|
|||
}
|
||||
|
||||
REGISTER_TYPED_TEST_CASE_P(HashValueIntTest, BasicUsage, FastPath);
|
||||
using IntTypes = testing::Types<unsigned char, char, int, int32_t, int64_t, uint32_t,
|
||||
uint64_t, size_t>;
|
||||
using IntTypes = testing::Types<unsigned char, char, int, int32_t, int64_t,
|
||||
uint32_t, uint64_t, size_t>;
|
||||
INSTANTIATE_TYPED_TEST_CASE_P(My, HashValueIntTest, IntTypes);
|
||||
|
||||
enum LegacyEnum { kValue1, kValue2, kValue3 };
|
||||
|
@ -819,8 +819,8 @@ TYPED_TEST_P(HashIntTest, BasicUsage) {
|
|||
}
|
||||
|
||||
REGISTER_TYPED_TEST_CASE_P(HashIntTest, BasicUsage);
|
||||
using IntTypes = testing::Types<unsigned char, char, int, int32_t, int64_t, uint32_t,
|
||||
uint64_t, size_t>;
|
||||
using IntTypes = testing::Types<unsigned char, char, int, int32_t, int64_t,
|
||||
uint32_t, uint64_t, size_t>;
|
||||
INSTANTIATE_TYPED_TEST_CASE_P(My, HashIntTest, IntTypes);
|
||||
|
||||
struct StructWithPadding {
|
||||
|
|
|
@ -200,10 +200,6 @@ static uint64_t Rotate(uint64_t val, int shift) {
|
|||
|
||||
static uint64_t ShiftMix(uint64_t val) { return val ^ (val >> 47); }
|
||||
|
||||
static uint64_t HashLen16(uint64_t u, uint64_t v) {
|
||||
return Hash128to64(uint128(u, v));
|
||||
}
|
||||
|
||||
static uint64_t HashLen16(uint64_t u, uint64_t v, uint64_t mul) {
|
||||
// Murmur-inspired hashing.
|
||||
uint64_t a = (u ^ v) * mul;
|
||||
|
@ -214,6 +210,11 @@ static uint64_t HashLen16(uint64_t u, uint64_t v, uint64_t mul) {
|
|||
return b;
|
||||
}
|
||||
|
||||
static uint64_t HashLen16(uint64_t u, uint64_t v) {
|
||||
const uint64_t kMul = 0x9ddfea08eb382d69ULL;
|
||||
return HashLen16(u, v, kMul);
|
||||
}
|
||||
|
||||
static uint64_t HashLen0to16(const char *s, size_t len) {
|
||||
if (len >= 8) {
|
||||
uint64_t mul = k2 + len * 2;
|
||||
|
@ -253,9 +254,8 @@ static uint64_t HashLen17to32(const char *s, size_t len) {
|
|||
|
||||
// Return a 16-byte hash for 48 bytes. Quick and dirty.
|
||||
// Callers do best to use "random-looking" values for a and b.
|
||||
static std::pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(uint64_t w, uint64_t x,
|
||||
uint64_t y, uint64_t z,
|
||||
uint64_t a, uint64_t b) {
|
||||
static std::pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(
|
||||
uint64_t w, uint64_t x, uint64_t y, uint64_t z, uint64_t a, uint64_t b) {
|
||||
a += w;
|
||||
b = Rotate(b + a + z, 21);
|
||||
uint64_t c = a;
|
||||
|
@ -266,8 +266,9 @@ static std::pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(uint64_t w, uint64_t
|
|||
}
|
||||
|
||||
// Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty.
|
||||
static std::pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(const char *s, uint64_t a,
|
||||
uint64_t b) {
|
||||
static std::pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(const char *s,
|
||||
uint64_t a,
|
||||
uint64_t b) {
|
||||
return WeakHashLen32WithSeeds(Fetch64(s), Fetch64(s + 8), Fetch64(s + 16),
|
||||
Fetch64(s + 24), a, b);
|
||||
}
|
||||
|
@ -310,8 +311,10 @@ uint64_t CityHash64(const char *s, size_t len) {
|
|||
uint64_t x = Fetch64(s + len - 40);
|
||||
uint64_t y = Fetch64(s + len - 16) + Fetch64(s + len - 56);
|
||||
uint64_t z = HashLen16(Fetch64(s + len - 48) + len, Fetch64(s + len - 24));
|
||||
std::pair<uint64_t, uint64_t> v = WeakHashLen32WithSeeds(s + len - 64, len, z);
|
||||
std::pair<uint64_t, uint64_t> w = WeakHashLen32WithSeeds(s + len - 32, y + k1, x);
|
||||
std::pair<uint64_t, uint64_t> v =
|
||||
WeakHashLen32WithSeeds(s + len - 64, len, z);
|
||||
std::pair<uint64_t, uint64_t> w =
|
||||
WeakHashLen32WithSeeds(s + len - 32, y + k1, x);
|
||||
x = x * k1 + Fetch64(s);
|
||||
|
||||
// Decrease len to the nearest multiple of 64, and operate on 64-byte chunks.
|
||||
|
@ -337,7 +340,7 @@ uint64_t CityHash64WithSeed(const char *s, size_t len, uint64_t seed) {
|
|||
}
|
||||
|
||||
uint64_t CityHash64WithSeeds(const char *s, size_t len, uint64_t seed0,
|
||||
uint64_t seed1) {
|
||||
uint64_t seed1) {
|
||||
return HashLen16(CityHash64(s, len) - seed0, seed1);
|
||||
}
|
||||
|
||||
|
|
20
third_party/abseil_cpp/absl/hash/internal/city.h
vendored
20
third_party/abseil_cpp/absl/hash/internal/city.h
vendored
|
@ -56,11 +56,6 @@ namespace absl {
|
|||
ABSL_NAMESPACE_BEGIN
|
||||
namespace hash_internal {
|
||||
|
||||
typedef std::pair<uint64_t, uint64_t> uint128;
|
||||
|
||||
inline uint64_t Uint128Low64(const uint128 &x) { return x.first; }
|
||||
inline uint64_t Uint128High64(const uint128 &x) { return x.second; }
|
||||
|
||||
// Hash function for a byte array.
|
||||
uint64_t CityHash64(const char *s, size_t len);
|
||||
|
||||
|
@ -71,24 +66,11 @@ uint64_t CityHash64WithSeed(const char *s, size_t len, uint64_t seed);
|
|||
// Hash function for a byte array. For convenience, two seeds are also
|
||||
// hashed into the result.
|
||||
uint64_t CityHash64WithSeeds(const char *s, size_t len, uint64_t seed0,
|
||||
uint64_t seed1);
|
||||
uint64_t seed1);
|
||||
|
||||
// Hash function for a byte array. Most useful in 32-bit binaries.
|
||||
uint32_t CityHash32(const char *s, size_t len);
|
||||
|
||||
// Hash 128 input bits down to 64 bits of output.
|
||||
// This is intended to be a reasonably good hash function.
|
||||
inline uint64_t Hash128to64(const uint128 &x) {
|
||||
// Murmur-inspired hashing.
|
||||
const uint64_t kMul = 0x9ddfea08eb382d69ULL;
|
||||
uint64_t a = (Uint128Low64(x) ^ Uint128High64(x)) * kMul;
|
||||
a ^= (a >> 47);
|
||||
uint64_t b = (Uint128High64(x) ^ a) * kMul;
|
||||
b ^= (b >> 47);
|
||||
b *= kMul;
|
||||
return b;
|
||||
}
|
||||
|
||||
} // namespace hash_internal
|
||||
ABSL_NAMESPACE_END
|
||||
} // namespace absl
|
||||
|
|
|
@ -855,7 +855,14 @@ class ABSL_DLL CityHashState
|
|||
// On other platforms this is still going to be non-deterministic but most
|
||||
// probably per-build and not per-process.
|
||||
ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Seed() {
|
||||
#if (!defined(__clang__) || __clang_major__ > 11) && \
|
||||
!defined(__apple_build_version__)
|
||||
return static_cast<uint64_t>(reinterpret_cast<uintptr_t>(&kSeed));
|
||||
#else
|
||||
// Workaround the absence of
|
||||
// https://github.com/llvm/llvm-project/commit/bc15bf66dcca76cc06fe71fca35b74dc4d521021.
|
||||
return static_cast<uint64_t>(reinterpret_cast<uintptr_t>(kSeed));
|
||||
#endif
|
||||
}
|
||||
static const void* const kSeed;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue