| // Copyright 2014 The Android Open Source Project |
| // |
| // This software is licensed under the terms of the GNU General Public |
| // License version 2, as published by the Free Software Foundation, and |
| // may be copied, distributed, and modified under those terms. |
| // |
| // This program is distributed in the hope that it will be useful, |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| // GNU General Public License for more details. |
| |
| #pragma once |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| |
| namespace android { |
| namespace base { |
| namespace internal { |
| |
| extern const int kPrimes[32]; |
| |
| enum { |
| kMinShift = 3, |
| kMaxShift = 31, |
| kMinCapacity = (1 << kMinShift), |
| kLoadScale = 1024, |
| kMinLoad = kLoadScale / 4, // 25% minimum load. |
| kMaxLoad = kLoadScale * 3 / 4, // 75% maximum load. |
| }; |
| |
| // A hash table uses an array of |1 << shift| items. Determine a shift |
| // value that is large enough to hold |size| items with comfortable load. |
| // |oldShift| is the current shift of the array, or 0 if it is not known. |
| // |
| // If this function returns |oldShift|, then no resizing is needed. |
| // Otherwise, the array must be resized to |1 << result| items. |
| size_t hashShiftAdjust(size_t size, size_t oldShift); |
| |
| // Hash a pointer value into something that can be used to implement |
| // hash tables. |
| inline size_t pointerHash(const void* ptr) { |
| return static_cast<size_t>( |
| reinterpret_cast<uintptr_t>(ptr)); |
| } |
| |
| } // namespace internal |
| } // namespace base |
| } // namespace android |