package common
|
|
|
|
import (
|
|
"bytes"
|
|
)
|
|
|
|
// Fingerprint returns the first 6 bytes of a byte slice.
|
|
// If the slice is less than 6 bytes, the fingerprint
|
|
// contains trailing zeroes.
|
|
func Fingerprint(slice []byte) []byte {
|
|
fingerprint := make([]byte, 6)
|
|
copy(fingerprint, slice)
|
|
return fingerprint
|
|
}
|
|
|
|
func IsZeros(slice []byte) bool {
|
|
for _, byt := range slice {
|
|
if byt != byte(0) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func RightPadBytes(slice []byte, l int) []byte {
|
|
if l < len(slice) {
|
|
return slice
|
|
}
|
|
padded := make([]byte, l)
|
|
copy(padded[0:len(slice)], slice)
|
|
return padded
|
|
}
|
|
|
|
func LeftPadBytes(slice []byte, l int) []byte {
|
|
if l < len(slice) {
|
|
return slice
|
|
}
|
|
padded := make([]byte, l)
|
|
copy(padded[l-len(slice):], slice)
|
|
return padded
|
|
}
|
|
|
|
func TrimmedString(b []byte) string {
|
|
trimSet := string([]byte{0})
|
|
return string(bytes.TrimLeft(b, trimSet))
|
|
|
|
}
|
|
|
|
// PrefixEndBytes returns the end byteslice for a noninclusive range
|
|
// that would include all byte slices for which the input is the prefix
|
|
func PrefixEndBytes(prefix []byte) []byte {
|
|
if prefix == nil {
|
|
return nil
|
|
}
|
|
|
|
end := make([]byte, len(prefix))
|
|
copy(end, prefix)
|
|
finished := false
|
|
|
|
for !finished {
|
|
if end[len(end)-1] != byte(255) {
|
|
end[len(end)-1]++
|
|
finished = true
|
|
} else {
|
|
end = end[:len(end)-1]
|
|
if len(end) == 0 {
|
|
end = nil
|
|
finished = true
|
|
}
|
|
}
|
|
}
|
|
return end
|
|
}
|