github.com/segmentio/parquet-go@v0.0.0-20230712180008-5d42db8f0d47/array_go18.go (about) 1 //go:build go1.18 2 3 package parquet 4 5 import ( 6 "unsafe" 7 8 "github.com/segmentio/parquet-go/internal/unsafecast" 9 "github.com/segmentio/parquet-go/sparse" 10 ) 11 12 func makeArray(base unsafe.Pointer, length int, offset uintptr) sparse.Array { 13 return sparse.UnsafeArray(base, length, offset) 14 } 15 16 func makeArrayOf[T any](s []T) sparse.Array { 17 var model T 18 return makeArray(unsafecast.PointerOf(s), len(s), unsafe.Sizeof(model)) 19 } 20 21 func makeSlice[T any](a sparse.Array) []T { 22 return slice[T](a.Index(0), a.Len()) 23 } 24 25 func slice[T any](p unsafe.Pointer, n int) []T { 26 return unsafe.Slice((*T)(p), n) 27 } 28 29 type sliceHeader struct { 30 base unsafe.Pointer 31 len int 32 cap int 33 }