cubefs

Форк
0
41 строка · 1.3 Кб
1
// Copyright 2019+ Klaus Post. All rights reserved.
2
// License information can be found in the LICENSE file.
3
// Based on work by Yann Collet, released under BSD License.
4

5
package zstd
6

7
const (
8
	prime3bytes = 506832829
9
	prime4bytes = 2654435761
10
	prime5bytes = 889523592379
11
	prime6bytes = 227718039650203
12
	prime7bytes = 58295818150454627
13
	prime8bytes = 0xcf1bbcdcb7a56463
14
)
15

16
// hashLen returns a hash of the lowest mls bytes of with length output bits.
17
// mls must be >=3 and <=8. Any other value will return hash for 4 bytes.
18
// length should always be < 32.
19
// Preferably length and mls should be a constant for inlining.
20
func hashLen(u uint64, length, mls uint8) uint32 {
21
	switch mls {
22
	case 3:
23
		return (uint32(u<<8) * prime3bytes) >> (32 - length)
24
	case 5:
25
		return uint32(((u << (64 - 40)) * prime5bytes) >> (64 - length))
26
	case 6:
27
		return uint32(((u << (64 - 48)) * prime6bytes) >> (64 - length))
28
	case 7:
29
		return uint32(((u << (64 - 56)) * prime7bytes) >> (64 - length))
30
	case 8:
31
		return uint32((u * prime8bytes) >> (64 - length))
32
	default:
33
		return (uint32(u) * prime4bytes) >> (32 - length)
34
	}
35
}
36

37
// hash3 returns the hash of the lower 3 bytes of u to fit in a hash table with h bits.
38
// Preferably h should be a constant and should always be <32.
39
func hash3(u uint32, h uint8) uint32 {
40
	return ((u << (32 - 24)) * prime3bytes) >> ((32 - h) & 31)
41
}
42

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.