/*
Package slice contains byte slice helpers.
*/
package slice

// CopyReverse returns a new byte slice containing reversed version of the
// original.
func CopyReverse(b []byte) []byte {
	dest := make([]byte, len(b))
	reverse(dest, b)
	return dest
}

// Reverse does in-place reversing of byte slice.
func Reverse(b []byte) {
	reverse(b, b)
}

func reverse(dst []byte, src []byte) {
	for i, j := 0, len(src)-1; i <= j; i, j = i+1, j-1 {
		dst[i], dst[j] = src[j], src[i]
	}
}

// Copy copies the byte slice into new slice (make/copy).
func Copy(b []byte) []byte {
	d := make([]byte, len(b))
	copy(d, b)
	return d
}