diff options
author | Ilya Zhuravlev <zhuravlevilya@ya.ru> | 2012-10-23 01:18:44 +0400 |
---|---|---|
committer | Sfan5 <sfan5@live.de> | 2013-09-09 22:50:50 +0200 |
commit | 58841ef12f6cba1bb622353c1fcaa0e3c6fb46c9 (patch) | |
tree | 6012bbb1905231025dff89aa73782a7c38666839 /src/leveldb/util/hash.cc | |
parent | 71a8769bb5ded4acb3f9e5a8502bb8af277f824d (diff) | |
download | minetest-58841ef12f6cba1bb622353c1fcaa0e3c6fb46c9.tar.gz minetest-58841ef12f6cba1bb622353c1fcaa0e3c6fb46c9.tar.bz2 minetest-58841ef12f6cba1bb622353c1fcaa0e3c6fb46c9.zip |
Add dummy and LevelDB database backends
Diffstat (limited to 'src/leveldb/util/hash.cc')
-rw-r--r-- | src/leveldb/util/hash.cc | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/leveldb/util/hash.cc b/src/leveldb/util/hash.cc new file mode 100644 index 000000000..ba1818082 --- /dev/null +++ b/src/leveldb/util/hash.cc @@ -0,0 +1,45 @@ +// Copyright (c) 2011 The LevelDB Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. See the AUTHORS file for names of contributors. + +#include <string.h> +#include "util/coding.h" +#include "util/hash.h" + +namespace leveldb { + +uint32_t Hash(const char* data, size_t n, uint32_t seed) { + // Similar to murmur hash + const uint32_t m = 0xc6a4a793; + const uint32_t r = 24; + const char* limit = data + n; + uint32_t h = seed ^ (n * m); + + // Pick up four bytes at a time + while (data + 4 <= limit) { + uint32_t w = DecodeFixed32(data); + data += 4; + h += w; + h *= m; + h ^= (h >> 16); + } + + // Pick up remaining bytes + switch (limit - data) { + case 3: + h += data[2] << 16; + // fall through + case 2: + h += data[1] << 8; + // fall through + case 1: + h += data[0]; + h *= m; + h ^= (h >> r); + break; + } + return h; +} + + +} // namespace leveldb |