aboutsummaryrefslogtreecommitdiff
path: root/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc
diff options
context:
space:
mode:
authorAndy Hung <hunga@google.com>2020-10-29 02:09:57 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-10-29 02:09:57 +0000
commit6305a290a0e261dbf61354f298a799297de54360 (patch)
tree35d73359fd09cc16d1fbb857909581bad75b765e /third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc
parentbdcf7c15937fa6f88b52f091024bd667d6b2b302 (diff)
parentb02c729712188d3420b78a1bbb1b779544bd4427 (diff)
downloadwebrtc-6305a290a0e261dbf61354f298a799297de54360.tar.gz
Merge "Import abseil-cpp to third_party" am: aa2897cdcb am: 2cc1e455f9 am: 4211622fc5 am: b02c729712
Original change: https://android-review.googlesource.com/c/platform/external/webrtc/+/1477956 Change-Id: I2157494054f0fdd15375163dda6ee668e2b90f0b
Diffstat (limited to 'third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc')
-rw-r--r--third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc48
1 files changed, 48 insertions, 0 deletions
diff --git a/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc b/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc
new file mode 100644
index 0000000000..919ac07405
--- /dev/null
+++ b/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc
@@ -0,0 +1,48 @@
+// Copyright 2018 The Abseil Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "absl/container/internal/raw_hash_set.h"
+
+#include <atomic>
+#include <cstddef>
+
+#include "absl/base/config.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace container_internal {
+
+constexpr size_t Group::kWidth;
+
+// Returns "random" seed.
+inline size_t RandomSeed() {
+#if ABSL_HAVE_THREAD_LOCAL
+ static thread_local size_t counter = 0;
+ size_t value = ++counter;
+#else // ABSL_HAVE_THREAD_LOCAL
+ static std::atomic<size_t> counter(0);
+ size_t value = counter.fetch_add(1, std::memory_order_relaxed);
+#endif // ABSL_HAVE_THREAD_LOCAL
+ return value ^ static_cast<size_t>(reinterpret_cast<uintptr_t>(&counter));
+}
+
+bool ShouldInsertBackwards(size_t hash, ctrl_t* ctrl) {
+ // To avoid problems with weak hashes and single bit tests, we use % 13.
+ // TODO(kfm,sbenza): revisit after we do unconditional mixing
+ return (H1(hash, ctrl) ^ RandomSeed()) % 13 > 6;
+}
+
+} // namespace container_internal
+ABSL_NAMESPACE_END
+} // namespace absl