github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/utils/slices/slices.go (about) 1 package slices 2 3 import "sort" 4 5 // Concat concatenates multiple []byte into one []byte with efficient one-time allocation. 6 func Concat(slices [][]byte) []byte { 7 var totalLen int 8 for _, s := range slices { 9 totalLen += len(s) 10 } 11 tmp := make([]byte, totalLen) 12 var i int 13 for _, s := range slices { 14 i += copy(tmp[i:], s) 15 } 16 return tmp 17 } 18 19 // EnsureByteSliceSize returns a copy of input bytes with given length 20 // trimming or left-padding with zero bytes accordingly 21 func EnsureByteSliceSize(b []byte, length int) []byte { 22 if len(b) > length { 23 b = b[len(b)-length:] 24 } 25 var stateBytes = make([]byte, length) 26 copy(stateBytes[length-len(b):], b) 27 28 return stateBytes 29 } 30 31 // MakeRange returns a slice of int from [min, max] 32 func MakeRange(min, max int) []int { 33 a := make([]int, max-min+1) 34 for i := range a { 35 a[i] = min + i 36 } 37 return a 38 } 39 40 // AreStringSlicesEqual returns true if the two string slices are equal. 41 func AreStringSlicesEqual(a, b []string) bool { 42 if len(a) != len(b) { 43 return false 44 } 45 46 sort.Strings(a) 47 sort.Strings(b) 48 49 for i := 0; i < len(a); i++ { 50 if a[i] != b[i] { 51 return false 52 } 53 } 54 55 return true 56 } 57 58 // StringSliceContainsElement returns true if the string slice contains the element. 59 func StringSliceContainsElement(a []string, v string) bool { 60 for _, x := range a { 61 if x == v { 62 return true 63 } 64 } 65 66 return false 67 }