diff options
author | ale <ale@incal.net> | 2017-12-18 22:35:16 +0000 |
---|---|---|
committer | ale <ale@incal.net> | 2017-12-18 22:35:16 +0000 |
commit | 445bf898d2015d1e28e5f01ef07b26be9dd42bf1 (patch) | |
tree | 05bae03d8625be5dee79ac408cf96b6ffae97840 /vendor/github.com/syndtr/goleveldb/leveldb/util/hash.go | |
parent | 394de2d98a9cfde6244620f0b188625b60f68f96 (diff) | |
download | crawl-445bf898d2015d1e28e5f01ef07b26be9dd42bf1.tar.gz crawl-445bf898d2015d1e28e5f01ef07b26be9dd42bf1.zip |
Add vendor deps
Diffstat (limited to 'vendor/github.com/syndtr/goleveldb/leveldb/util/hash.go')
-rw-r--r-- | vendor/github.com/syndtr/goleveldb/leveldb/util/hash.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/util/hash.go b/vendor/github.com/syndtr/goleveldb/leveldb/util/hash.go new file mode 100644 index 0000000..7f3fa4e --- /dev/null +++ b/vendor/github.com/syndtr/goleveldb/leveldb/util/hash.go @@ -0,0 +1,48 @@ +// Copyright (c) 2012, Suryandaru Triandana <syndtr@gmail.com> +// All rights reserved. +// +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package util + +import ( + "encoding/binary" +) + +// Hash return hash of the given data. +func Hash(data []byte, seed uint32) uint32 { + // Similar to murmur hash + const ( + m = uint32(0xc6a4a793) + r = uint32(24) + ) + var ( + h = seed ^ (uint32(len(data)) * m) + i int + ) + + for n := len(data) - len(data)%4; i < n; i += 4 { + h += binary.LittleEndian.Uint32(data[i:]) + h *= m + h ^= (h >> 16) + } + + switch len(data) - i { + default: + panic("not reached") + case 3: + h += uint32(data[i+2]) << 16 + fallthrough + case 2: + h += uint32(data[i+1]) << 8 + fallthrough + case 1: + h += uint32(data[i]) + h *= m + h ^= (h >> r) + case 0: + } + + return h +} |