mirror of
https://github.com/tuneinsight/lattigo.git
synced 2025-09-13 03:27:14 +00:00
66 lines
1.3 KiB
Go
66 lines
1.3 KiB
Go
package utils
|
|
|
|
import (
|
|
"math/bits"
|
|
)
|
|
|
|
func EqualSliceUint64(a, b []uint64) (v bool) {
|
|
v = true
|
|
for i := range a {
|
|
v = v && (a[i] == b[i])
|
|
}
|
|
return
|
|
}
|
|
|
|
func EqualSliceUint8(a, b []uint8) (v bool) {
|
|
v = true
|
|
for i := range a {
|
|
v = v && (a[i] == b[i])
|
|
}
|
|
return
|
|
}
|
|
|
|
func IsInSliceUint64(x uint64, slice []uint64) (v bool) {
|
|
for i := range slice {
|
|
v = v || (slice[i] == x)
|
|
}
|
|
return
|
|
}
|
|
|
|
// MinUint64 returns the minimum value of the input slice of uint64 values.
|
|
func MinUint64(a, b uint64) (r uint64) {
|
|
if a <= b {
|
|
return a
|
|
}
|
|
return b
|
|
}
|
|
|
|
// MaxUint64 returns the maximum value of the input slice of uint64 values.
|
|
func MaxUint64(a, b uint64) (r uint64) {
|
|
if a >= b {
|
|
return a
|
|
}
|
|
return b
|
|
}
|
|
|
|
// MaxUint64 returns the maximum value of the input slice of uint64 values.
|
|
func MaxFloat64(a, b float64) (r float64) {
|
|
if a >= b {
|
|
return a
|
|
}
|
|
return b
|
|
}
|
|
|
|
// BitReverse64 returns the bit-reverse value of the input value, within a context of 2^bitLen.
|
|
func BitReverse64(index, bitLen uint64) uint64 {
|
|
return bits.Reverse64(index) >> (64 - bitLen)
|
|
}
|
|
|
|
// HammingWeight64 returns the hammingweight if the input value.
|
|
func HammingWeight64(x uint64) uint64 {
|
|
x -= (x >> 1) & 0x5555555555555555
|
|
x = (x & 0x3333333333333333) + ((x >> 2) & 0x3333333333333333)
|
|
x = (x + (x >> 4)) & 0x0f0f0f0f0f0f0f0f
|
|
return ((x * 0x0101010101010101) & 0xffffffffffffffff) >> 56
|
|
}
|