internal/byteslice: add specialized Uint32 for []uint32 view

Uint32 is the garbage-free and more efficient version of Slice.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2021-03-11 11:40:41 +01:00
parent b8bdb96d35
commit fdfa481082
+10
View File
@@ -21,6 +21,16 @@ func Struct(s interface{}) []byte {
return res
}
// Uint32 returns a byte slice view of a uint32 slice.
func Uint32(s []uint32) []byte {
n := len(s)
if n == 0 {
return nil
}
blen := n * int(unsafe.Sizeof(s[0]))
return (*[1 << 30]byte)(unsafe.Pointer(&s[0]))[:blen:blen]
}
// Slice returns a byte slice view of a slice.
func Slice(s interface{}) []byte {
v := reflect.ValueOf(s)