github.com/geniusesgroup/libgo@v0.0.0-20220713101832-828057a9d3d4/convert/array-slice-unsafe.go (about) 1 /* For license and copyright information please see LEGAL file in repository */ 2 3 package convert 4 5 import ( 6 "reflect" 7 "unsafe" 8 ) 9 10 // Unsafe16ByteArraySliceToByteSlice returns ... 11 func Unsafe16ByteArraySliceToByteSlice(req [][16]byte) (res []byte) { 12 var reqStruct = (*reflect.SliceHeader)(unsafe.Pointer(&req)) 13 var resStruct = (*reflect.SliceHeader)(unsafe.Pointer(&res)) 14 resStruct.Data = reqStruct.Data 15 resStruct.Len = reqStruct.Len * 16 16 resStruct.Cap = reqStruct.Cap * 16 17 return 18 } 19 20 // UnsafeByteSliceTo16ByteArraySlice returns ... 21 func UnsafeByteSliceTo16ByteArraySlice(req []byte) (res [][16]byte) { 22 var reqStruct = (*reflect.SliceHeader)(unsafe.Pointer(&req)) 23 var resStruct = (*reflect.SliceHeader)(unsafe.Pointer(&res)) 24 resStruct.Data = reqStruct.Data 25 resStruct.Len = reqStruct.Len / 16 26 resStruct.Cap = reqStruct.Cap / 16 27 return 28 } 29 30 // Unsafe32ByteArraySliceToByteSlice returns ... 31 func Unsafe32ByteArraySliceToByteSlice(req [][32]byte) (res []byte) { 32 var reqStruct = (*reflect.SliceHeader)(unsafe.Pointer(&req)) 33 var resStruct = (*reflect.SliceHeader)(unsafe.Pointer(&res)) 34 resStruct.Data = reqStruct.Data 35 resStruct.Len = reqStruct.Len * 32 36 resStruct.Cap = reqStruct.Cap * 32 37 return 38 } 39 40 // UnsafeByteSliceTo32ByteArraySlice returns ... 41 func UnsafeByteSliceTo32ByteArraySlice(req []byte) (res [][32]byte) { 42 var reqStruct = (*reflect.SliceHeader)(unsafe.Pointer(&req)) 43 var resStruct = (*reflect.SliceHeader)(unsafe.Pointer(&res)) 44 resStruct.Data = reqStruct.Data 45 resStruct.Len = reqStruct.Len / 32 46 resStruct.Cap = reqStruct.Cap / 32 47 return 48 }