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 }