github.com/geniusesgroup/libgo@v0.0.0-20220713101832-828057a9d3d4/convert/complex-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  // UnsafeComplex64SliceToByteSlice returns ...
    11  func UnsafeComplex64SliceToByteSlice(req []complex64) (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 * 8
    16  	resStruct.Cap = reqStruct.Cap * 8
    17  	return
    18  }
    19  
    20  // UnsafeByteSliceToComplex64Slice returns ...
    21  func UnsafeByteSliceToComplex64Slice(req []byte) (res []complex64) {
    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 / 8
    26  	resStruct.Cap = reqStruct.Cap / 8
    27  	return
    28  }
    29  
    30  // UnsafeComplex128SliceToByteSlice returns ...
    31  func UnsafeComplex128SliceToByteSlice(req []complex128) (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 * 16
    36  	resStruct.Cap = reqStruct.Cap * 16
    37  	return
    38  }
    39  
    40  // UnsafeByteSliceToComplex128Slice returns ...
    41  func UnsafeByteSliceToComplex128Slice(req []byte) (res []complex128) {
    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 / 16
    46  	resStruct.Cap = reqStruct.Cap / 16
    47  	return
    48  }