|
@ -16,23 +16,6 @@ import ( |
|
|
"unsafe" |
|
|
"unsafe" |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
func ptrToSlice(ptr unsafe.Pointer, n uintptr) []byte { |
|
|
|
|
|
var p []byte |
|
|
|
|
|
|
|
|
|
|
|
type _bslice struct { |
|
|
|
|
|
ptr *byte |
|
|
|
|
|
len uintptr |
|
|
|
|
|
cap uintptr |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
pslice := (*_bslice)(unsafe.Pointer(&p)) |
|
|
|
|
|
pslice.ptr = (*byte)(ptr) |
|
|
|
|
|
pslice.cap = n |
|
|
|
|
|
pslice.len = n |
|
|
|
|
|
|
|
|
|
|
|
return p |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// leveldb hash
|
|
|
// leveldb hash
|
|
|
func hash32(ptr unsafe.Pointer, n, seed uintptr) uint32 { |
|
|
func hash32(ptr unsafe.Pointer, n, seed uintptr) uint32 { |
|
|
|
|
|
|
|
@ -41,7 +24,7 @@ func hash32(ptr unsafe.Pointer, n, seed uintptr) uint32 { |
|
|
m = 0xc6a4a793 |
|
|
m = 0xc6a4a793 |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
b := ptrToSlice(ptr, n) |
|
|
b := unsafe.Slice((*byte)(ptr), n) |
|
|
|
|
|
|
|
|
h := uint32(lseed^seed) ^ uint32(uint(len(b))*uint(m)) |
|
|
h := uint32(lseed^seed) ^ uint32(uint(len(b))*uint(m)) |
|
|
|
|
|
|
|
|