diff options
| author | Vijay Venkatraman <vijaykv@google.com> | 2017-01-26 01:49:12 +0000 |
|---|---|---|
| committer | android-build-merger <android-build-merger@google.com> | 2017-01-26 01:49:12 +0000 |
| commit | a252f11da35e870cb365fdd204f98e7e32cf5a5d (patch) | |
| tree | e69ddcf746d32fb2af4d45ac9d4a7c3e2dc06d3f /libutils/include/utils/JenkinsHash.h | |
| parent | 311e4295dcbfe33c21f92154ac87a02593336c15 (diff) | |
| parent | f484dd3401bb83557603f44f94e5bcb6d2071eed (diff) | |
| download | system_core-a252f11da35e870cb365fdd204f98e7e32cf5a5d.tar.gz system_core-a252f11da35e870cb365fdd204f98e7e32cf5a5d.tar.bz2 system_core-a252f11da35e870cb365fdd204f98e7e32cf5a5d.zip | |
Merge "Exporting C++ headers from system/core" am: 812b7d5d52
am: f484dd3401
Change-Id: I1c60ff535ef1e11cfca8ff942bf6c2fd11313ede
Diffstat (limited to 'libutils/include/utils/JenkinsHash.h')
| -rw-r--r-- | libutils/include/utils/JenkinsHash.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/libutils/include/utils/JenkinsHash.h b/libutils/include/utils/JenkinsHash.h new file mode 100644 index 000000000..027c10c7e --- /dev/null +++ b/libutils/include/utils/JenkinsHash.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * 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 + * + * http://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. + */ + +/* Implementation of Jenkins one-at-a-time hash function. These choices are + * optimized for code size and portability, rather than raw speed. But speed + * should still be quite good. + **/ + +#ifndef ANDROID_JENKINS_HASH_H +#define ANDROID_JENKINS_HASH_H + +#include <utils/TypeHelpers.h> + +namespace android { + +/* The Jenkins hash of a sequence of 32 bit words A, B, C is: + * Whiten(Mix(Mix(Mix(0, A), B), C)) */ + +#ifdef __clang__ +__attribute__((no_sanitize("integer"))) +#endif +inline uint32_t JenkinsHashMix(uint32_t hash, uint32_t data) { + hash += data; + hash += (hash << 10); + hash ^= (hash >> 6); + return hash; +} + +hash_t JenkinsHashWhiten(uint32_t hash); + +/* Helpful utility functions for hashing data in 32 bit chunks */ +uint32_t JenkinsHashMixBytes(uint32_t hash, const uint8_t* bytes, size_t size); + +uint32_t JenkinsHashMixShorts(uint32_t hash, const uint16_t* shorts, size_t size); + +} + +#endif // ANDROID_JENKINS_HASH_H |
