diff --git a/common/byteslice.go b/common/byteslice.go index e1e0dc6b9..ebc9ae38a 100644 --- a/common/byteslice.go +++ b/common/byteslice.go @@ -1,7 +1,25 @@ package common -func Fingerprint(bytez []byte) []byte { +func Fingerprint(slice []byte) []byte { fingerprint := make([]byte, 6) - copy(fingerprint, bytez) + copy(fingerprint, slice) return fingerprint } + +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 +} diff --git a/common/math.go b/common/math.go index cc9c31ade..b037d1a71 100644 --- a/common/math.go +++ b/common/math.go @@ -42,6 +42,20 @@ func MaxUint32(a, b uint32) uint32 { return b } +func MaxInt64(a, b int64) int64 { + if a > b { + return a + } + return b +} + +func MaxUint64(a, b uint64) uint64 { + if a > b { + return a + } + return b +} + func MaxInt(a, b int) int { if a > b { return a @@ -100,6 +114,20 @@ func MinUint32(a, b uint32) uint32 { return b } +func MinInt64(a, b int64) int64 { + if a < b { + return a + } + return b +} + +func MinUint64(a, b uint64) uint64 { + if a < b { + return a + } + return b +} + func MinInt(a, b int) int { if a < b { return a @@ -113,3 +141,17 @@ func MinUint(a, b uint) uint { } return b } + +//----------------------------------------------------------------------------- + +func ExpUint64(a, b uint64) uint64 { + accum := uint64(1) + for b > 0 { + if b&1 == 1 { + accum *= a + } + a *= a + b >>= 1 + } + return accum +}